HTTP Reponse 400
异常场景
- A 服务通过HTTP方式请求B服务的接口
- A 中参数类与 B 中接收请求的参数类不同,类中属性数量有差别
- A 中参数类中通过 @JsonIgnoreProperties(ignoreUnknown = true) 注解
- B 中HTTP 接口配置接收数据类型为JSON
@RequestMapping(value = "xxx", produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE, method = )
- A 中接收到 B 中接口的返回值 400 ,说明请求是成功的
异常分析
- 请求是突然发生的,查看代码提交记录,定位问题
- 发现如果让A 与 B 中不同的属性字段相同,就不会报错;当然,去掉本次新增的代码后问题也会解决;
- 临时方案让A 与 B 中属性一致
异常定位
- 项目服务化拆分,A 与 B 项目本身引用的依赖规划都不是很合理,以JSON为例,GSON / FastJson / JackSon 等依赖都有已用;使用方式也很多,没有统一规范
- 问题的原因在于 B 项目中的 JackSon 依赖的版本被升级到 版本,B中接收请求A的请求JSON串,在JSON转为B中参数类时异常,接口无响应
- 本次查看maven依赖:mvn dependency:tree -Dverbose > ;
问题解决
- 恢复 JackSon 的引用版本;使用现有版本完成新增的功能