背景描述
最近做项目,开发一个dubbo服务给对方调用,DTO使用了@data注解,代替显式的get,set等方法,通过maven打成jar包deploy到私服,给对方引用。
问题描述
服务提供者的调用日志显示,查询结果成功有数据,list有3个对象数据,但是服务消费者的查询日志显示成功调用,但是数据为空,list有3个对象,但是对象的属性都为null。
解决过程
1、首先定位到问题出在序列化和反序列化上。
2、排查dto是否支持序列化和反序列化,没问题
3、排查dto是否存在继承关系,父类的属性与子类属性名称相同,有可能导致属性被赋值为null,也没问题
4、意外走进了依赖jar包里看看dto的字节码文件,发现@data注解没有了,也没有生成属性的get和set方法,意外之喜啊。怀疑是没有set方法,导致在反序列化时属性没有被赋值,还保持默认值null。
5、dto中手动加上了get和set方法,重新打包deploy到私服,调用测试,消费者终于查到数据了。打完收工。
6、总结,问题产生的根源都是认知的不足。下一章研究get和set消失的原因