解决 SpringBeanUtils 的 copyProperties 默认会复制 null 属性的问题
前言
假设有个 Person
类, 其有两个属性 name
和 age
这里有两个对象 person1
和 person2
person1
的 name
为 p
, age
为 null
person2
的 name
为 null
, age
为 123
直接使用 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
2021-07-11 最简单的 FFMPEG 使用 Nvidia CUDA GPU 加速的方法