解决 SpringBeanUtils 的 copyProperties 默认会复制 null 属性的问题
前言
假设有个 Person 类, 其有两个属性 name 和 age
这里有两个对象 person1 和 person2
person1 的 name 为 p, age 为 null
person2 的 name 为 null, age 为 123
直接使用 BeanUtils.copyProperties(person1,person2) 的话,复制完毕后的属性就会是
person1, name: p, age: null
person2, name: p, age: null
某些时候我们并不想让已有的属性被 null 覆盖, 这个时候就需要用到 BeanUtils.copyProperties 的一个重载方法了。
解决
public static <T> T copyPropertiesIgnoreNull(Object src, T dst) {
final BeanWrapper beanWrapper = new BeanWrapperImpl(src);
BeanUtils.copyProperties(src, dst, Arrays
.stream(beanWrapper.getPropertyDescriptors())
.map(FeatureDescriptor::getName)
.filter(name -> beanWrapper.getPropertyValue(name) == null)
.toArray(String[]::new)
);
return dst;
}
同样的上边的例子, 使用这个方法复制属性的结果是
person1, name: p, age: null
person2, name: p, age: 123

浙公网安备 33010602011771号