一、接受处理参数的来源上
@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/json
、application/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