@RequestParam
用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)
@RequestBody
处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据。
- GET请求中,因为没有HttpEntity,所以@RequestBody并不适用
- POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。
- GET请求可以使用@RequestBody来接收参数吗?答案是可以的。但需要两个条件,一是请求方式为GET,二是请求参数写入请求体中。
- 测试方式:curl -XGET -H “Content-Type:application/json” “http://host:port/requestmapping” -d ‘{“paramId”:[1,2,3]}’
总结
在GET请求中,不能使用@RequestBody。
在POST请求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,对于参数转化的配置必须统一