1、问题发生背景
使用postman调用之前测试成功的接口,再进行项目拆分,重构之后,接口突然不通了,排查了很久,以为是框架调整,导致出了问题。
2、问题发生的原因
经过一系列的排查,排查详细过程就不写了,心累,人麻了。。发现接口的@RequestBody 包导入错了,因为框架整合了SwaggerUI,导致迁移代码的时候自动导入了swagger包下的RequstBody类,正确的因该引用spring annotation包下的RequestBody,下面记录一下排查过程。
3、排查过程
1)postman调用post接口,Header也配置了Content-Type=application/json。
2)接口使用swagger包 下的@RequestBody,参数属性值没有映射上,一开始以为是lombok没生效导致的。
3)然后尝试使用swaggerUI调用,打开浏览器控制台,接口的参数是拼接在url后面的,通过swagger调式是没问题的。
https;//xxx/query?keyword=1&pageNum=1&pageSize=10
4)后来翻阅@RequestBody这个注解,发现它不止一个包下有,仔细查阅资料,发现Spring下的RequestBody才会把请求的body参数,转换成所需要的json,映射到实体类上。
5)至此,换下包,问题解决
第一: io.swagger.v3.oas.annotations.parameters.RequestBody
这个是swagger的依赖,当引入这个注解后在postman测试传入json数据后会接受不到
参数,让传入的参数都为空,但是在swagger里面可以映射到参数
第二: org.springframework.web.bind.annotation
这个是web的依赖,用这个依赖再传入json数据之后会接收到数据
切记!!!应该用第二个依赖!!!