今天在测试调整项目结构代码后,对数据的发送接收做测试,发现数据能接收到,但是接收到的字段全都是空的
排查过程
1.1、追踪数据源头
-
通过远程调试确认数据是正常发送,每个字段都是有值的
1.2、确认数据接收实体对象是否有问题
一开始以为是并发导致的,因为其他地方也有用到该实体,但是调试过程中发现堆栈信息根本不是其他线程上下文,
重新还原原本的代码(没有恢复原本的代码结构),尝试每个字段的get/set都加this还是不行
回滚代码
在并发问题的思路上耗费太多时间,决定先把代码回滚到修改模块依赖的版本,跑起来竟然正常了,有点不可思议
分析确认问题原因
重新整理思路:
1、本次调整只修改代码依赖结构,不大可能是并发问题,有的话之前就出现了
2、数据流向:数据发送--》解析json》接收为实体,从结果上看,实体接收不到数据,应该就是解析出问题了
解决问题
重新看了代码的引入包,发现一个是用的
com.fasterxml.jackson.annotation.JsonProperty;
一个用的是
org.codehaus.jackson.annotate.JsonProperty;
将两个模块的json都用jackson,将公共的A模块中的json依赖改成和B一致就行,在A中加入以下依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
反思
- 遇到问题时应联想前后改动了啥,不要不明不白地就开始着手解决
- 数据流向是问题定位的最好方法,出现问题必须先找到真正的问题根源再动手