springboot版本升级的坑,BeanUtils的copyProperties方法值丢失问题

在Springboot2.7.5版本中,beanCopy时若列表元素对象非同一类,会导致复制丢失。而在2.3.2.RELEASE版本中,即使对象不同也能成功复制。新版本增加了泛型类型校验导致此问题。解决方案包括确保列表内对象相同或使用JSON转换进行对象转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用springboot的2.7.5版本进行beanCopy的copy结果:

 

其中region对象中都只有一个字段

在2.7.5版本中,如果list元素中,被拷贝源对象和目标对象使用的对象不是一个object的话,就会出现copy丢失的情况,测试时,即使list中的对象名相同,如果不是同一个(不同系统的不同对象,对象名,字段都一直),也都会出现copy都是,即list中必须是同一个对象才会被copy成功。

使用springboot的2.3.2.RELEASE版本进行beanCopy的copy结果:

 

同样的场景,值可以被copy过来,test2中的list使用的是region2,test1中使用的是region1。

结论是:版本升级后,两个bean之间的copy,如果有list,那么list的对象必须为同一个对象才能把值也copy过去,不然会出现值丢失的情况。

原因:老版本因为泛型类型擦除,List<T> 做copy处理时拿到的实际是List对象,spring校验会通过,故可成功。

新版本spring添加了泛型类型校验,不通过的直接忽略了。

解决办法:

(1)两个bean对象之间的copy,如果有list对象类型的,确保里面对象属于同一个。

(2)也可以用json转换的方式进行bean对象的互相转换,避免丢失数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值