文章目录
- 问题
- 解决方法1(引入hutool包)
- 解决方法2新增方法
问题
在使用beanutils的copyProperties时候想如果参数为null的就不进行复制;
解决方法1(引入hutool包)
引入hutool包使用 cn.hutool.core.bean.BeanUtil的方法进行复制对象
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.6</version>
</dependency>
使用参考:https://hutool.cn/docs/#/core/JavaBean/Bean%E5%B7%A5%E5%85%B7-BeanUtil:
我使用如下,忽略大小写,忽略null值,忽略注入失败的值
cn.hutool.core.bean.BeanUtil.copyProperties(source, target,
true, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
解决方法2新增方法
org.springframework.beans.BeanUtils的copyProperties方法可以传忽略拷贝对象的属性的名称;
咱们就新增个返回 对象属性为空的名称 的方法就可以了;
public static String[] getNullPropertyNames (Object source) {
final BeanWrapper wrapper = new BeanWrapperImpl(source);
java.beans.PropertyDescriptor[] pds = wrapper.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<>();
for(java.beans.PropertyDescriptor pd : pds) {
Object srcValue = wrapper.getPropertyValue(pd.getName());
if (srcValue == null) emptyNames.add(pd.getName());
}
String[] result = new String[emptyNames.size()];
return emptyNames.toArray(result);
}
使用就是:
org.springframework.beans.BeanUtils.copyProperties(source,target,getNullPropertyNames(source));