@RequestBody和@RequestParam使用区别

 

一、接受处理参数的来源上

  @RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中(URL后拼接的参数用@RequestParam);

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

二、处理数据格式上

  @RequestParam处理Content-Type 为 form-data、application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性;

  @RequestBody一般处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/jsonapplication/xml等类型的数据。

三、请求类型上

  @RequestParam可用于GET和POST请求;

  @RequestBody可用于POST请求,不能用于GET请求。通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。GET请求没有HttpEntity所以不适用。

四、POST、GET中两种注解的使用

POST:

@RequestBody

(@RequestBody Map map)
(@RequestBody Object object)
application/json时候可用
form-data、x-www-form-urlencoded时候不可用

@Requestaram

(@RequestParam Map map)
application/json时候,json字符串部分不可用,url中的?后面添加参数即可用,form-data、x-www-form-urlencoded时候可用,但是要将Headers里的Content-Type删掉
(@RequestParam String waterEleId,@RequestParam String enterpriseName)
application/json时候,json字符串部分不可用,url中的?后面添加参数即可用
form-data、x-www-form-urlencoded时候可用,且参数可以没有顺序(即前端传过来的参数或者url中的参数顺序不必和后台接口中的参数顺序一致,只要字段名相同就可以),但是要将Headers里的Content-Type删掉
(@RequestParam Object object)
不管application/json、form-data、x-www-form-urlencoded都不可用

既不是@RequestBody也不是@RequestParam,没有指定参数哪种接收方式

(Map map)
(Object object)
application/json时候:json字符串部分不可用,url中的?后面添加参数不可用。
因为没有指定,它也不知道到底是用json字符串部分还是?后面添加参数部分,所以干脆都不可以用
form-data、x-www-form-urlencoded时都不可用,见图二
 
(HttpServletRequest request)
application/json不可用
form-data、x-www-form-urlencoded时可用

GET:

@RequestBody

RequestBody -- Map / Object
GET请求中不可以使用@RequestBody

@RequestParam

(@RequestParam Map map)
在url中的?后面添加参数即可使用
(@RequestParam String waterEleId,@RequestParam String enterpriseName)
在url中的?后面添加参数即可使用
(@RequestParam Object object)
GET请求中不可以使用

THE IDEA:

  @PathVariable注解,解决动态获取参数问题

  一种应用场景,接口规范为resultful风格时,举个例子:如果要获取某个id下此条问题答案的查询次数的话,则后台就需要动态获取参数,其注解为@PathVariable,并且requestMapping中的value应为value="/{id}/queryNum",截图如下:

 

 

参考:

https://blog.csdn.net/weixin_38004638/article/details/99655322

@RequestParam @RequestBody @PathVariable 等参数绑定注解详解

https://blog.csdn.net/walkerjong/article/details/7946109

https://my.oschina.net/u/3372000/blog/906217

https://www.jianshu.com/p/4981911d5e15

https://cloud.tencent.com/developer/article/1414464

 

posted @ 2020-12-22 18:24  我怎么这么好看  阅读(589)  评论(0编辑  收藏  举报