beanutils.copyproperties()如何忽略没用值得属性
时间: 2023-10-12 21:14:45 浏览: 132
BeanUtils.copyProperties() 是 Apache Commons BeanUtils 库中的一个方法,它可以将一个 JavaBean 对象的属性值复制到另一个 JavaBean 对象中,从而实现对象属性值的拷贝。
如果源对象中有一些属性的值为 null,而目标对象中对应的属性值非 null,那么默认情况下 BeanUtils.copyProperties() 方法会将源对象中的 null 值覆盖掉目标对象中的非 null 值,这可能会导致数据丢失。
为了避免这种情况,可以使用 BeanUtils.copyProperties() 方法的另一个重载方法,它接受一个 Converter 对象作为参数。通过实现 Converter 接口,可以自定义属性值的转换规则,并且可以忽略源对象中的某些属性,从而避免将 null 值覆盖掉目标对象中的非 null 值。
例如,可以实现一个 NullAwareBeanUtilsBean 类,重写其 copyProperties() 方法,在复制属性值时忽略源对象中的 null 值。代码示例如下:
```java
public class NullAwareBeanUtilsBean extends BeanUtilsBean {
@Override
public void copyProperty(Object dest, String name, Object value) throws IllegalAccessException, InvocationTargetException {
if (value == null) {
return;
}
super.copyProperty(dest, name, value);
}
@Override
public void copyProperties(Object dest, Object orig) throws IllegalAccessException, InvocationTargetException {
super.copyProperties(dest, orig, new Converter() {
@Override
public <T> T convert(Class<T> type, Object value) {
return value == null ? null : (T)value;
}
});
}
}
```
在使用 NullAwareBeanUtilsBean 进行属性值拷贝时,会忽略源对象中的 null 值。例如:
```java
Person source = new Person();
source.setName(null);
source.setAge(30);
Person dest = new Person();
NullAwareBeanUtilsBean beanUtils = new NullAwareBeanUtilsBean();
beanUtils.copyProperties(dest, source);
System.out.println(dest.getName()); // 输出 null
System.out.println(dest.getAge()); // 输出 30
```
阅读全文