BeanUtils.copyProperties 拷贝空值么
时间: 2023-11-08 21:05:38 浏览: 92
BeanUtils.copyProperties 方法默认情况下会拷贝源对象中的所有属性值到目标对象中,包括空值(null)。如果源对象的属性值为 null,那么目标对象的对应属性值也会被设置为 null。如果需要在拷贝时忽略空值,可以使用 BeanUtils.copyProperties 方法的另一个重载方法,该方法接受一个 PropertyDescriptor 数组参数用于指定需要忽略的属性。
相关问题
BeanUtils.copyProperties排除空值属性
BeanUtils.copyProperties方法是Apache Commons BeanUtils库中的一个工具方法,用于将一个Java对象的属性值复制到另一个Java对象中。默认情况下,该方法会将源对象的所有属性值复制到目标对象中,包括空值属性。
如果你想要排除空值属性,可以使用自定义的属性拷贝器(PropertyUtilsBean)来实现。以下是一种可能的实现方式:
1. 创建一个自定义的属性拷贝器类,继承自PropertyUtilsBean类,并重写copyProperties方法。
```java
import org.apache.commons.beanutils.PropertyUtilsBean;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.beanutils.DynaBean;
public class CustomPropertyUtils extends PropertyUtilsBean {
@Override
public void copyProperties(Object dest, Object orig) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(orig);
for (PropertyDescriptor origDescriptor : origDescriptors) {
String name = origDescriptor.getName();
if (PropertyUtils.isReadable(orig, name) && PropertyUtils.isWriteable(dest, name)) {
Object value = PropertyUtils.getSimpleProperty(orig, name);
if (value != null) {
PropertyUtils.setSimpleProperty(dest, name, value);
}
}
}
}
}
```
2. 在你的代码中使用自定义的属性拷贝器类进行属性拷贝。
```java
CustomPropertyUtils customPropertyUtils = new CustomPropertyUtils();
customPropertyUtils.copyProperties(destObject, sourceObject);
```
这样,只有源对象中非空的属性值才会被复制到目标对象中。
BeanUtils.copyProperties()有两种
BeanUtils.copyProperties()有两种用法。第一种用法是BeanUtils.copyProperties(Object dest, Object source)将源对象的属性值拷贝到目标对象中,如果源对象属性值为空,则目标对象属性值不变。第二种用法是BeanUtils.copyProperties(Object dest, Object source, CopyOptions options)除了将源对象属性值拷贝到目标对象中外,还可以根据CopyOptions的设置来控制拷贝过程中的操作,例如忽略空值、忽略错误等。
阅读全文