当前位置: 首页 > news >正文

java浅拷贝BeanUtils.copyProperties引发的RPC异常 | 京东物流技术团队

背景

近期参与了一个攻坚项目,前期因为其他流程原因,测试时间已经耽搁了好几天了,本以为已经解决了卡点,后续流程应该顺顺利利的,没想到 人在地铁上,bug从咚咚来~

没有任何修改的服务接口,抛出异常:

java.lang.ClassCastException: java.util.HashMap cannot be cast to cn.xxx.xxx.xxx.xxx.BatchInfo

排查过程

1、作为资深写bug的老司机,第一感觉是传参的报文格式有问题了,可以通过模拟报文排查。于是乎,在群里圈了服务提供方同学B看下,BG快速的用测试工具+本地debug的方式,验证了下报文格式,发现居然都调用成功了。。。

2、同步服务调用同学L,重点关注:1)、调用方的序列化方式;2)、最近代码改动逻辑是否有问题。L同学确认自己逻辑没有问题后,同步B同学和S同学,看内部是否有什么处理逻辑。。。

3、第二天早上一来,快速写了单测,确认服务端收到的报文格式,的确没有问题。于是乎,开始扒代码。。。发现可疑的代码:

BeanUtils.copyProperties(item,cargoInfo)

private List<CargoInfo> convertToCargoInfo(OutboundEventCallbackRequest outboundEventCallbackRequest) {return outboundEventCallbackRequest.getCargos().stream().map(item -> {CargoInfo cargoInfo = new CargoInfo();BeanUtils.copyProperties(item, cargoInfo);return cargoInfo;}).collect(Collectors.toList());
}

PS:客户端&服务端类关系

因为BeanUtils.copyProperties属于浅拷贝,而浅拷贝只是调用子对象的set方法,并没有将所有属性拷贝(引用的一个内存地址)。所以将在进行调用时,JSF会因为反序列化时找不到对应的类,就会将其转换为Map。

直观图如下:

以上,初步定位原因,解决方式也就清晰了。

解决方案

去掉BeanUtils.copyProperties,进行手动赋值。最终解决了这个问题。

后续反思

1、想起王东岳老师的那句话,越原始的越稳定~

2、如果这种转换比较多,建议使用MapStruct

3、谨慎使用BeanUtils.copyProperties,请看:

作者:京东物流 吴义

来源:京东云开发者社区 自猿其说 Tech 转载请注明来源

http://www.lryc.cn/news/270780.html

相关文章:

  • 【pynput】鼠标行为追踪并模拟
  • docker小白第十天
  • Apache SSI 远程命令执行漏洞
  • 阿里云30个公共云地域、89个可用区、5个金融云和政务云地域
  • Linux驱动开发之杂项设备注册和Linux2.6设备注册
  • javafx写一个文档编辑器
  • PHP与Angular详细对比 帮助你选择合适的项目技术
  • 基于立锜RTQ7882,支持全协议及DP显示功能的PD快充方案
  • 2023-12-25 LeetCode每日一题(不浪费原料的汉堡制作方案)
  • JavaScript 基础通关
  • 目标检测损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU原理及Pytorch实现
  • 今年努力输出的嵌入式Linux视频
  • python非常好用的文件系统监控库
  • 基于SpringBoot的电影购票系统
  • Spring系列:Spring如何解决循环依赖
  • netty源码:(40)ReplayingDecoder
  • Apache Doris (五十五): Doris Join类型 - Colocation Join
  • 计算机组成原理复习7
  • python使用openpyxl操作excel
  • 使用keepalived时虚拟IP漂移注意事项
  • 32阵元 MVDR和DREC DOA估计波束方向图对比
  • OpenCV-11颜色通道的分离与合并
  • 从0到1入门C++编程——01 C++基础知识
  • C#编程-编写和执行C#程序2
  • Day02-ES6
  • 2023年12月记录内容管理
  • 【测试基础】构造测试数据之 MySQL 篇
  • 基于单片机的语音识别自动避障小车(论文+源码)
  • 2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项样题卷①
  • 【信息安全原理】——入侵检测与网络欺骗(学习笔记)