首先,这两个注解都是用来接收前端传给后端的数据的,但是前端传送的格式不同,后端就要选择相应的注解来接收,否则就会报400 Bad Request错误
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TyXGy6p9-1607932568643)(C:\Users\Wypeng\Pictures\csdn\1\400badrequest错误.png)]
[外链图片转存失败,源站可能有
防盗]!链机制,建(C\Users\Wypeng\Pictures\csdn\1)]
或者是 Required String parameter ‘xxx’ is not present错误
虽然不敢说以上两种错误的原因一定是这两个注解用错了导致的,但是大部分应该都是这个原因。所以今天对这两个注解做一下总结。
我之前的理解是@RequestBody是用来接收对象数据的,对应的请求应该为post请求,而且数据格式应该是json格式,当发送请求时,其内容会被封装到请求头中,不会被拼接到URL后面;而@RequestParam会被拼接到URL后面。很简单的理解,希望写完这篇文章之后能有些深刻的认识。
1.@RequestParam搭配GetMapping
这是实体类
这是后台
下面是postman的测试结果:
1.1 以键值对方式传参
结论:加不加注解都能接收
1.2 封装到body中以正常表单数据方式传参
结论:都可
1.3 封装到body中以json格式传参
结论:不可行
验证了一下,图中圈出的地方俊不可行
接收对象
经测试,Get请求无法通过@RequestParam接收参数
2.@RequestBody搭配GetMapping
后台接口如图:
2.1 以键值对方式传参
不可
2.2 封装到body中以正常表单数据方式传参
不可
2.3 封装到Body中以x-www-form-urlencoded格式传参
可行,但是此时接收的是键值对,需要对参数进行处理
2.4 封装到body中以json格式传参
同上
接收对象
只能接收json格式,其余均不可行
3 .@RequestBody搭配@PostMapping
3.1接收对象(不带@RequestBody注解)
除如图下方式,其他均可
3.2 接收对象(带@RequestBody注解)
除如图下方式,其他均不可
@RequestParam搭配@PostMapping
1.1 接收对象
post请求无法通过@RequestParam接收对象
1.2 接收普通参数
除json外均可
结论:
@RequestParam用来接收普通参数,适用大部分
@RequestBody和post请求搭配使用,接收对象
欢迎指正