场景和原因
今天在做项目的时候碰到一个问题,前端使用Axios像后端Controller发送请求,其中后端Controller请求参数如下所示
注意:这里使用了getmapping
问题分析
在我们实际开发中,经常需要使用@RequestBody来绑定GET请求参数。
然而GET的参数是通过Url方式传递的,如果使用请求体传递传递的话,服务器则会将它抛弃不处理
https://stackoverflow.com/questions/34956899/does-spring-requestbody-support-the-get-method
其实从注解的英文单词上也很容易理解@RequestBody显然是用来接收请求体的,GET没有,显然就接不到。
@RequestParam的意思是请求参数,不管是GET还是POST参数都可以接收到。
解决办法
如果想绑定到复杂对象上,可以将GET转为POST方式。
也可以通过多个@RequestParam接收后组装成对象。
还有一个解决方案是另外一篇文章“SpringBoot Controller 中使用多个@RequestBody的正确姿势”
不仅支持GET和POST方式,并且支持多个对象的绑定。