如何使BeanUtils不对空值进行复制

一,用法

在开发过程中,我们通常会用到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中的空值进行复制了

发布了43 篇原创文章 · 获赞 12 · 访问量 4660

猜你喜欢

转载自blog.csdn.net/Jarbein/article/details/103614256
今日推荐