最近涉及到了在 copyProperties 遇见了一些问题,从Dto 到 Vo的拷贝出现了问题(参数名相同,类型不一致)
使用BeanUtils
实现属性拷贝,在类型不同时,会忽略 target
对象相同命名参数的,而 Hutool
提供的BeanUtil则不会忽略
下面是我的测试代码
import cn.hutool.core.bean.BeanUtil;
import org.junit.Test;
import org.springframework.beans.BeanUtils;
public class HutoolPractice {
@Test
public void copyPropertie() {
Dto dto = new Dto();
dto.setId(10L);
Vo vo = new Vo();
BeanUtils.copyProperties(dto, vo);
System.out.println("Spring CopyPropertie:" + vo.getId());
BeanUtil.copyProperties(dto, vo);
System.out.println("Hutool CopyPropertie:" + vo.getId());
}
class Dto {
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
class Vo {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
}
下面是结果
BeanUtils.copyProperties
代碼如下,第二個條件校验了 set函数
的入参类型和 get函数
的返回类型是否相同
if (readMethod != null && ClassUtils.isAssignable(writeMethod.getParameterTypes()[0], readMethod.getReturnType())){
...
writeMethod.invoke(target, value);
}