@RequestBody和@RequestParam区别

501 阅读2分钟

前言

相信大家对# @RequestBody和@RequestParam都不陌生,这两个注解在我们的日常家口开发中能够经常应用的到,那么这两个注解有什么区别和联系吗?日常的使用中什么情况该用哪一种呢?

@RequestBody:

@RequestBody主要用来接收客户端请求传递给后台接口的json字符串中的数据(请求体中的数据);
由于GET方式的请求没有具体的请求体,所以在使用@RequestBody注解接收数据的时候,客户端不能使用GET方式请求数据,需要用POST方式进行提交。
在同一个后台接口里,@RequestBody@RequestParam可以同时使用,且@RequestBody最多 只能有一个 ,而@RequestParam 可以有多个 (一个注解对应一个参数)。

如果前端向后端传递的是非实体类对象,后台也可以使⽤@RequestBody注解,那就用List<Map<String, String>>来接收 @RequestParam:

注解@RequestParam所接收的参数是来自于RequestHeader中,即请求头中。 @RequestParam可以用来接受一些简单类型的属性,当然其也可以接受一些对象的类型。

@RequestParam有三个配置参数:

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

@RequestParam注解是用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为其属性。@RequestParam也可用于其它类型的请求,例如:POST等请求。

总结:

**@RequestParam **

  1. 既支持POST请求,也支持GET请求。
  2. 只支持Content-Type:为form-data或者application/x-www-form-urlencoded编码的内容。在Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

**@RequestBody **

  1. 只支持post请求,不支持GET请求。
  2. 必须要在请求头中申明content-Type(如application/json)springMvc通过HandlerAdapter配置的HttpMessageConverters解析httpEntity的数据,并绑定到相应的bean上。