@RequestBody和@RequestParam区别

@RequestBody

注解@RequestBody接收的参数是来自requestBody中,即请求体。

主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)

最常用的请求体传参是POST请求,所以使用@RequestBody接收数据时,一般都用POST方式进行提交。

请求方式

  • GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
  • POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,

@RequestParam

注解@RequestParam接收的参数是来自requestHeader中,即请求头。

接收的参数是来自HTTP请求体或请求url的QueryString中。

RequestParam可以接受简单类型的属性,也可以接受对象类型。

实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。

如果在请求中指定contentType: 'application/json;charset=UTF-8’时会出现400错误

@RequestParam有三个配置参数:

  • required 表示是否必须,默认为 true,必须。
  • defaultValue 可设置请求参数的默认值。
  • value 为接收url的参数名(相当于key值)。

区别

  • 在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用
  • @RequestBody最多只能有一个,而@RequestParam()可以有多个。

总结

  • 在GET请求中,不能使用@RequestBody。
  • 在POST请求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,对于参数转化的配置必须统一。
  • 如果使用@RequestParam来接受参数,可以在接受参数的model中设置@DateFormat指定所需要接受时间参数的格式。
  • 在使用@RequestParam,不能指定contentType: ‘application/json; charset=UTF-8’
  • 另外,使用@RequestBody接受的参数是不会被Servlet转化统一放在request对象的Param参数集中,@RequestParam是可以的。
  • 一般情况下,推荐使用@RequestParam注解来接受Http请求参数。

POST请求时

  • @RequestBody --> JSON字符串部分
  • @RequestParam --> 请求参数部分
  • application/json格局图
  • form-data、x-www-form-urlencoded格局图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z1427094386

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值