简单捋捋@RequestParam 和 @RequestBody的使用

作者:lankeren 时间:2022-11-02 16:19:20 

前端向后端传递参数,后端怎么去接收,就会想到 spring 的注解

之前的话,我一直用的是 RequestParam("userName") String userName 这种形式,讲道理不怎么用 RequestParam String userName

无意间该去看看这两个是有什么不同了.

  • @RequestParam

  • @RequestBody (以 json 数据的形式接收)

 如果不写 @RequestParam(xxx) 注解的话,那么就前端可以有 可以没有对应的xxx名字都行

 如果有xxx名,那么就会自动匹配; 

如果没有,请求也能正确发送。

一、 @RequestParam


  /**
  * 用户登录
  * @param userName
  * @param password
  * @return
  */
 @RequestMapping(value = "login", method = RequestMethod.POST)
 public String login(@RequestParam String userName,
           @RequestParam String password){

public BaseResponse login(@RequestParam("user") String userName,
              @RequestParam("psd") String password){

如果前端不传 userName 或者 password 参数名的参数就会报错

1. 用 @RequestParam 前端传过来的参数名默认为 userName 我们String后面起的参数名

如果前端不传 user 或者 psd 参数名的参数就会报错

2. 用 @RequestParam("user") @RequestParam("psd"), 给前端传递过来的参数指定参数名

错误信息

3. "message":"Required String parameter 'userName' is not present"

其实还有其他的形式

看下面

@RequestParam(value="user" required=false) 这个注解

可以通过 required = false 或者 true 来要求 @RequestParam配置的前端参数是否一定要传

required = false 表示不传的话,会给参数赋值为 null ,required = true 就是必须要有

注意:

如果@requestParam注解的参数是int类型,并且required=false,此时如果不传参数的话,会报错。原因是,required=false时,不传参数的话,会给参数赋值null,这样就会把null赋值给了int,因此会报错。

使用 Integer 包装类型的话还要需要注意空指针异常

二、@RequestBody

@RequestBody 以 字符串 的形式接收前端传过来的请求体中的 json 数据


 @RequestMapping(value = "login", method = RequestMethod.POST)
 public String login(@RequestBody String jsonStr){

简单捋捋@RequestParam 和 @RequestBody的使用       

@RequestBody 以 简单对象 接收前端传过来的 json 数据


 @RequestMapping(value = "login", method = RequestMethod.POST)
 public String login(@RequestBody User user){

简单捋捋@RequestParam 和 @RequestBody的使用

@RequestBody以 复杂对象 接收前端传过来的 json 数据


 @RequestMapping(value = "login", method = RequestMethod.POST)
 public String login(@RequestBody Team team){

简单捋捋@RequestParam 和 @RequestBody的使用

参考: 笔者JustryDeng

来源:https://segmentfault.com/a/1190000021304159

标签:@RequestParam,@RequestBody
0
投稿

猜你喜欢

  • ClassLoader类加载源码解析

    2023-11-25 18:17:09
  • spring中bean的生命周期详解

    2021-11-29 23:31:02
  • Java中为什么start方法不能重复调用而run方法可以?

    2023-11-15 03:04:02
  • Java 八种基本类型和基本类型封装类

    2023-11-26 14:15:16
  • 详解Java中的实例初始化块(IIB)

    2023-06-08 08:35:46
  • SpringBoot基于数据库的定时任务统一管理的实现

    2023-12-10 12:57:47
  • obix协议在java中的配置和使用详解

    2023-11-25 20:59:42
  • windows下java环境变量的设置方法

    2022-12-01 03:13:14
  • Java 手写LRU缓存淘汰算法

    2023-03-03 00:11:19
  • 详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类

    2021-08-04 03:16:28
  • 基于SpringBoot实现用户身份验证工具

    2022-05-08 18:37:29
  • Spring框架学习常用注解汇总

    2023-11-10 17:38:53
  • Maven属性与版本管理详细步骤分解

    2023-11-15 14:38:45
  • Java与Node.js利用AES加密解密出相同结果的方法示例

    2021-09-11 21:06:58
  • java中TESTful架构原理分析

    2022-03-02 21:12:10
  • 解析spring cloud ouath2中的Eureka

    2023-10-12 04:07:54
  • 使用JAVA实现http通信详解

    2023-11-12 12:21:12
  • SpringSecurity解决POST方式下CSRF问题

    2023-07-18 18:59:51
  • JetCache 缓存框架的使用及源码解析(推荐)

    2021-07-23 12:21:25
  • Idea Jrebel 报错:Cannot reactivate,offline seat in use

    2022-01-11 05:08:22
  • asp之家 软件编程 m.aspxhome.com