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

被折叠的 条评论
为什么被折叠?



