一,用法
在开发过程中,我们通常会用到org.springframework.beans.BeanUtils;这个类有时可以提高我们的开发效率,
BeanUtils.copyProperties(request, news);
上边的reqeust和news都是同一个类的引用,意思就是将request类中的所有属性值赋值到news中所有对应的属性值,但是这样问题就来了,如果request中一些属性值为空,而news中对应的属性值不为空,赋值后news中这些原本不为空的属性就为空了,这里我们用到另外一个方法
最后一个参数就是赋值时忽略这些值的赋值,使target中这些属性不被覆盖
但是我们还要知道source中哪些值为空,才能保证这些空值不会去覆盖target中的值,所以可以封装一个方法,找出source中的空值属性,返回一个string数组,放到第三个参数中,使赋值时忽略这些值
二,封装方法
封装方法如下
/**
* 配合beanutils设置对源对象中空的元素不进行复制,避免了目标对象某属性原本不为空,赋值后为空
*/
public static String[] getNullPropertyNames (Object source) {
final BeanWrapper src = new BeanWrapperImpl(source);
java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<String>();
for(java.beans.PropertyDescriptor pd : pds) {
Object srcValue = src.getPropertyValue(pd.getName());
if (srcValue == null) {
emptyNames.add(pd.getName());
}
}
String[] result = new String[emptyNames.size()];
return emptyNames.toArray(result);
}
具体使用示例:
BeanUtils.copyProperties(request,news,Utils.getNullPropertyNames(request));
这样就不会对source中的空值进行复制了