使用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对象的互相转换,避免丢失数据。