2022-04-22 14:26

Spring中如何把一个对象的非空属性值复制给其他对象

王姐姐

JavaEE

(1670)

(0)

收藏

在spring中复制对象可以使用org.springframework.beans.BeanUtils的copyProperties方法:

BeanUtils.copyProperties(object1,object2);

这样把object1的所有同名属性都会拷贝给object2,两个对象的类型并不要求相同。

默认会拷贝所有的属性,如果想只拷贝非空属性,需要做个工具类:

public class WanmaUtils {
    //获得所有非空属性名
    public static String[] getNullProps(Object object) {
        final BeanWrapper beanWrapper = new BeanWrapperImpl(object);
        java.beans.PropertyDescriptor[] propertyDescriptors = beanWrapper.getPropertyDescriptors();
        Set<String> nullPropNames = new HashSet<String>();
        for (java.beans.PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            Object propertyValue = beanWrapper.getPropertyValue(propertyDescriptor.getName());
            if (propertyValue == null){
                nullPropNames.add(propertyDescriptor.getName());
            }
        }
        String[] nullPropNameArr = new String[nullPropNames.size()];
        return nullPropNames.toArray(nullPropNameArr);
    }
}


这样拷贝的时候可以如下使用:

public void update(Movie object) {
Movie movie = movieRepository.getById(object.getId());
BeanUtils.copyProperties(object,movie, WanmaUtils.getNullProps(object));
movieRepository.save(movie);
}


0条评论

点击登录参与评论