引言
在学习
SpringBoot
的时候,我只是粗略地学习了@RequestParam
的使用方法,并没有认真学习@RequestBody
。
然而在阅读别人写的代码的时候,我发现了
@RequestBody
注解,于是尝试了解@RequestParam
和@RequestBody
的区别。
搜索
经过搜索,我发现了一篇对这两个注解的区别讲解十分十分透彻的文章,在这里贴一个链接:
@RequestBody和@RequestParam区别
大体内容是说:
@RequestParam
@RequestParam
注解是用于处理content-type
为application/x-www-form-lencoded
编码格式的数据和url中拼接的数据,不能接收其他格式的数据- 虽然用
@RequestParam
注解获取到的json
数据也可以通过处理转化为想要的类型,但不推荐使用这种方法。(具体方法可以参考原文)
@RequestBody
- 注解
@RequestBody
接收的参数是来自requestBody
中,即请求体。一般用于处理非Content-Type: application/x-www-form-urlencoded
编码格式的数据,比如:application/json、application/xml
等类型的数据。
除此之外,原文还介绍了更多关于这两个注解的内容,如果有兴趣可以点击链接查看。
源码
在网上搜索答案之外,我还查看了RequestParam
注解的源码,其中有这么一段:
大概意思是说:
支持SpringMVC和SpringWebFlux中带注释的处理程序方法有如下几种:
- 在Spring MVC中,“请求参数”映射到请求参数、表单数据和multipart requests(可能翻译成“文件数据”?)的一部分。这是因为Servlet API将请求参数和表单数据结合进了一个集合叫做“parameters”,并且这个集合包括了自动解析的请求正文。
- 在Spring WebFlux中,“request parameters”集合仅仅包括了请求参数,若想要获取全部三种数据——请求、表单数据和“multipart data“(文件数据),你可以将数据绑定到命令对象并且给它加上ModelAttribute的注解。
总结
@RequestParam
和@RequestBody
还是有非常大的区别的,我在将来使用这两个注解的时候会更加小心,注意两者使用情景的区别,以免造成错误。