解决 SpringBeanUtils 的 copyProperties 默认会复制 null 属性的问题

前言

假设有个 Person 类, 其有两个属性 nameage
这里有两个对象 person1person2
person1namep, agenull
person2namenull, age123
直接使用 BeanUtils.copyProperties(person1,person2) 的话,复制完毕后的属性就会是
person1, name: p, age: null
person2, name: p, age: null
某些时候我们并不想让已有的属性被 null 覆盖, 这个时候就需要用到 BeanUtils.copyProperties 的一个重载方法了。

解决

    public static <T> T copyPropertiesIgnoreNull(Object src, T dst) {
        final BeanWrapper beanWrapper = new BeanWrapperImpl(src);
        BeanUtils.copyProperties(src, dst, Arrays
                .stream(beanWrapper.getPropertyDescriptors())
                .map(FeatureDescriptor::getName)
                .filter(name -> beanWrapper.getPropertyValue(name) == null)
                .toArray(String[]::new)
        );
        return dst;
    }

同样的上边的例子, 使用这个方法复制属性的结果是
person1, name: p, age: null
person2, name: p, age: 123

posted @   博麗靈夢  阅读(1605)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
历史上的今天:
2021-07-11 最简单的 FFMPEG 使用 Nvidia CUDA GPU 加速的方法
点击右上角即可分享
微信分享提示