关于@RequestBody和@RequestParam注解的使用

基础知识

@RequestBody注解用于接收前端传递给后端的请求体中的json字符串中的数据,因为读取的是请求体当中的数据,所以需要通过POST请求进行数据提交。
@RequestParam注解用来处理请求头Content-Type: 为 application/x-www-form-urlencoded编码的内容。get 方式中queryString的值,和post方式中 body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中进行获取。
一个请求当中@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

@RequestBody

  • 注解@RequestBody一般用于接收requestBody即请求体当中的参数,在后端注解对应的类在将HTTP的输入流(含请求体)装配到目标类时,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值符合(或可转换为) 实体类的对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性。
  • son字符串中,如果value为"“的话,后端对应属性如果是String类型的,那么接受到的就是”",如果是后端属性的类型是Integer、Double等类型,那么接收到的就是null。
  • json字符串中,如果value为null的话,后端对应收到的就是null。

@RequestParam

RequestParam可以接受简单类型的属性,也可以接受对象类型。
@RequestParam当中有三个配置参数:

  • required 表示是否必须,默认为 true,必须。
  • defaultValue 可设置请求参数的默认值。
  • value 为接收url的参数名(相当于key值)。
    注解@RequestParam一般用于接收requestParam即请求头当中的参数,在后端注解参数如果是基础数据类型,且require为false时不传参数会发生错误,原因是,required=false时,不传参数的话,会给参数赋值null。

总结

  • 从content-type方面来讲:form-data、x-www-form-urlencoded:不可以用@RequestBody,可以用@RequestParam;application/json:json字符串部分可以用@RequestBody;url中的?后面参数可以用@RequestParam。
  • 从注解方面来讲:当同时使用@RequestParam和@RequestBody时,@RequestParam指定的参数可以是普通元素、数组、集合、对象等等(即:当@RequestBody 与@RequestParam()可以同时使用时,原SpringMVC接收参数的机制不变,只不过RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收)。即:如果参数时放在请求体中,传入后台的话,那么后台要用@RequestBody才能接收到;如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或则形参前什么也不写也能接收。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值