文章目录

  • 问题
  • 解决方法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方法可以传忽略拷贝对象的属性的名称;

BeanUtils只拷贝对象中属性值不为null的属性_解决方法


咱们就新增个返回 对象属性为空的名称 的方法就可以了;

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));