java浅拷贝BeanUtils.copyProperties引发的RPC异常
💡
原文中文,约1200字,阅读约需3分钟。
📝
内容提要
作者吴义分享了一个项目中的bug排查经历,因测试延误遇到java.lang.ClassCastException异常。经过排查,发现问题源于BeanUtils.copyProperties的浅拷贝导致反序列化错误,最终通过手动赋值解决,并反思了使用BeanUtils的风险。
🎯
关键要点
- 作者吴义分享了项目中的bug排查经历,遇到java.lang.ClassCastException异常。
- 测试时间因其他流程原因耽搁,导致排查时出现问题。
- 初步怀疑是传参的报文格式有问题,但通过测试工具验证后发现调用成功。
- 重点关注调用方的序列化方式和最近的代码改动,确认逻辑没有问题。
- 通过单测确认服务端收到的报文格式没有问题,开始排查代码。
- 发现问题源于BeanUtils.copyProperties的浅拷贝导致反序列化错误。
- 解决方案是去掉BeanUtils.copyProperties,进行手动赋值。
- 反思使用BeanUtils的风险,建议使用MapStruct进行转换。
❓
延伸问答
在项目中遇到的java.lang.ClassCastException异常是什么原因?
异常是由于BeanUtils.copyProperties的浅拷贝导致反序列化错误。
如何解决BeanUtils.copyProperties引发的问题?
解决方案是去掉BeanUtils.copyProperties,进行手动赋值。
使用BeanUtils.copyProperties有什么风险?
BeanUtils.copyProperties属于浅拷贝,可能导致反序列化时找不到对应的类。
在排查过程中,作者最初怀疑的问题是什么?
作者最初怀疑是传参的报文格式有问题。
作者在排查过程中采取了哪些步骤?
作者通过模拟报文、确认序列化方式和编写单测来排查问题。
如果需要进行多次转换,作者建议使用什么工具?
作者建议使用MapStruct进行转换。
➡️