POST/GET请求中RequestBody和RequestParam的应用场景
POST请求时
@RequestBody --> JSON字符串部分
@RequestParam --> 请求参数部分
application/json格局图
![](http://upload-images.jianshu.io/upload_images/1461379-63abc6cc86a063af.png?imageMogr2/auto-orient/strip|imageView2/2/w/1100/format/webp)
图一.png
form-data、x-www-form-urlencoded格局图
![](http://upload-images.jianshu.io/upload_images/1461379-4910149eda3e4bd4.png?imageMogr2/auto-orient/strip|imageView2/2/w/1118/format/webp)
图二.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中
![](http://upload-images.jianshu.io/upload_images/1461379-2111998c70879334.png?imageMogr2/auto-orient/strip|imageView2/2/w/1080/format/webp)
GET请求问号后添加参数.png
举栗子
上传文件,包含了图中圈出来的两部分
![](http://upload-images.jianshu.io/upload_images/1461379-4910149eda3e4bd4.png?imageMogr2/auto-orient/strip|imageView2/2/w/1118/format/webp)
图二.png
如果这样,没有@RequestParam,那么url?后的参数就拿不到
如果control中这样接收,本来想formData只接收url?后的参数,结果将{ "retCode": null, "data": true }这部分内容也拿到了,真实意外之喜。字符串这部分内容还可以从request中取到,见下面完整方法。
完整方法
/**
* 导入
*/
作者:墨色尘埃
链接:https://www.jianshu.com/p/4981911d5e15