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 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 map = JSON.parseObject(JSON.toJSONString(object),new TypeReference>(){});

二、使用commons-beanutils

依赖包:

  commons-beanutilscommons-beanutils1.8.3

然后调用方法:

 /** * 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 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 之前。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持html中文网。

以上就是BeanUtils.copyProperties在拷贝属性时忽略空值的操作的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java