BeanUtils.copyProperties避坑

BeanUtils.copyProperties避坑

先说一下我遇到的问题吧,我用了org.springframework.beans;下的BeanUtils.copyProperties(ModelA,ModelB),应该是将A复制到B,可是在复制完后续处理数据的过程中,处理代码没问题,可是一直报错,之后才发现原来是这样的,举个栗子
ModelA中有个集合是这样的

private List<Class1> classList;

ModelB中有个集合是这样的

private List<Class2> classList;

因为情景需要,Class1和Class2有个别变量是不一样的
因为名字一样都是classList,复制过程中ModelB中的classList就被Model A的classList完全覆盖了,导致集合类型也变了,可是通过ModelB的get和set方法得到的集合类型依旧是List< Class2>,就导致了之后处理的冲突
发现这个问题之后,我是这样处理的

//集合复制
public static <E, T> List<T> convertList(List<E> input, Class<T> clzz) {
	List<T> output = Lists.newArrayList();
	if (!CollectionUtils.isEmpty(input)) {
		for (E source : input) {
			T target = BeanUtils.instantiateClass(clzz);
			BeanUtils.copyProperties(source, target);
			output.add(target);
		}
	}
	return output;
}
//复制
private School2 copy(School1 school1, School2 school2) {
	if(school1 != null) {
		BeanUtils.copyProperties(school1, school2);
		List<Class2> list = convertList(school1.getClassList(), Class2.class);
		school2.setClassList(list);
	}
	return school2;
}

这样就保证了复制结果中List集合的类型也是正确的


使用过程中还需注意一点

两种框架下的BeanUtils.copyProperties用法不一样

package org.springframework.beans中BeanUtils.copyProperties(A,B)
是A中的值付给B

package org.apache.commons.beanutils中BeanUtils.copyProperties(A,B)
是B中的值付给A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值