温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

BeanUtils.copyProperties在拷贝属性时如何忽略空值

发布时间:2021-06-16 13:40:11 来源:亿速云 阅读:1596 作者:chen 栏目:开发技术

本篇内容主要讲解“BeanUtils.copyProperties在拷贝属性时如何忽略空值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“BeanUtils.copyProperties在拷贝属性时如何忽略空值”吧!

BeanUtils.copyProperties忽略空值

使用spring开发的人,对这行代码肯定不陌生,常用于DTO、VO、PO之间的复制。

/**
* 全属性copy对象
* 
**/
BeanUtils.copyProperties(Object source, Object target)

但这行代码会将所有的属性都进行copy,有的时候我们想要个别属性不进行复制(比如:null值属性),这时就需要用到另一个方法:

/**
* 忽略某些属性copy对象
* 
**/
BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties)

第三个参数是可变长类型,动态获取忽略的属性:

/**
 * 获取需要忽略的属性
 * 
 * @param source
 * @return
 */
public static String[] getNullPropertyNames (Object source) {
    final BeanWrapper src = new BeanWrapperImpl(source);
    PropertyDescriptor[] pds = src.getPropertyDescriptors();
 
    Set<String> emptyNames = new HashSet<>();
    for(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);
}

拓展一下下:

很多时候我们需要将Map与Bean之间转换,提供两种方式:

一、使用fastjson

1、map转bean:

Map paramMap = new HashMap();
String jsonStr = JSONObject.toJSONString(paramMap);
Object infoDo = JSON.parseObject(jsonStr, Object.class);

2、bean转map:

Map<String, Object> map = JSON.parseObject(JSON.toJSONString(object),new TypeReference<Map<String,Object>>(){});

二、使用commons-beanutils

依赖包:

<dependency>
 <groupId>commons-beanutils</groupId>
 <artifactId>commons-beanutils</artifactId>
 <version>1.8.3</version>
</dependency>

然后调用方法:

/**
 * Bean转map
 * 
 * @param bean
 * @return
 */
public Map describe(Object bean);
 
/**
 * map转bean
 * 
 * @param bean
 * @param map
 */
public void populate (Object bean, Map map);

同时可以按指定的属性列表copy对象:

/**
 * 按指定的属性列表赋值对象
 *
 * @param source
 * @param target
 * @param properties
 *
 */
public static void copyWithProperties(Object source, Object target, List<String> properties) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
    for (String property : properties) {
        PropertyUtils.setProperty(target, property, PropertyUtils.getProperty(source, property));
    }
}

BeanUtils 在复制类时需要注意 值为空的情况

BeanUtils.copyProperties(dest, orig);

此处引用的是 org.apache.commons.beanutils.BeanUtils;

ConvertUtils.register(new DateConverter(null), java.util.Date.class);

添加这一行代码,解决date 类型为空 报错

ConvertUtils.register(new IntegerConverter(null), Integer.class);

这一行,可以解决 integer值为空时不自动赋值为0;

另外 double 可能也很特殊,我没研究。

注意这些后加的条件要放在BeanUtils.copyProperties 之前。

到此,相信大家对“BeanUtils.copyProperties在拷贝属性时如何忽略空值”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI