前言
相信大家对# @RequestBody和@RequestParam都不陌生,这两个注解在我们的日常家口开发中能够经常应用的到,那么这两个注解有什么区别和联系吗?日常的使用中什么情况该用哪一种呢?
@RequestBody:
@RequestBody
主要用来接收客户端请求传递给后台接口的json字符串中的数据(请求体中的数据);
由于GET
方式的请求没有具体的请求体,所以在使用@RequestBody
注解接收数据的时候,客户端不能使用GET
方式请求数据,需要用POST
方式进行提交。
在同一个后台接口里,@RequestBody
与@RequestParam
可以同时使用,且@RequestBody
最多 只能有一个 ,而@RequestParam
可以有多个 (一个注解对应一个参数)。
如果前端向后端传递的是非实体类对象,后台也可以使⽤@RequestBody注解,那就用List<Map<String, String>>来接收 @RequestParam:
注解@RequestParam所接收的参数是来自于RequestHeader中,即请求头中。 @RequestParam可以用来接受一些简单类型的属性,当然其也可以接受一些对象的类型。
@RequestParam有三个配置参数:
- required 表示是否必须,默认为 true,必须。
- defaultValue 可设置请求参数的默认值。
- value 为接收url的参数名(相当于key值)。
@RequestParam注解是用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为其属性。@RequestParam也可用于其它类型的请求,例如:POST等请求。
总结:
**@RequestParam **
- 既支持POST请求,也支持GET请求。
- 只支持Content-Type:为form-data或者application/x-www-form-urlencoded编码的内容。在Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)
**@RequestBody **
- 只支持post请求,不支持GET请求。
- 必须要在请求头中申明content-Type(如application/json)springMvc通过HandlerAdapter配置的HttpMessageConverters解析httpEntity的数据,并绑定到相应的bean上。