POST/GET请求中RequestBody和RequestParam的应用场景

POST请求时
@RequestBody --> JSON字符串部分
@RequestParam --> 请求参数部分
application/json格局图

 
图一.png

form-data、x-www-form-urlencoded格局图
 
图二.png

 

1、从content-type方面总结:
① form-data、x-www-form-urlencoded:不可以用@RequestBody;可以用@RequestParam。见postman的格局,这两种方式的时候没有json字符串部分。
② application/json:json字符串部分可以用@RequestBody;url中的?后面参数可以用@RequestParam。见postman的格局

2、从两种注解方式总结:
@RequestBody

(

@RequestParam

(
(
(@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请求中不可以使用

@RequestParam

(
(
(

当使用GET请求时,通过postman添加?后面的参数,不用在url中自己一个一个拼,点击Params,在下面key-value中输入就自动拼接到url中


 
GET请求问号后添加参数.png

举栗子
上传文件,包含了图中圈出来的两部分

 
图二.png

如果这样,没有@RequestParam,那么url?后的参数就拿不到

 

如果control中这样接收,本来想formData只接收url?后的参数,结果将{ "retCode": null, "data": true }这部分内容也拿到了,真实意外之喜。字符串这部分内容还可以从request中取到,见下面完整方法。

完整方法

    /**
     * 导入
     */
    
 
 



作者:墨色尘埃
链接:https://www.jianshu.com/p/4981911d5e15

posted @ 2020-01-09 16:50  panchanggui  阅读(2396)  评论(0编辑  收藏  举报