BeanUtils.copyProperties在拷贝属性时忽略空值的操作

网友投稿 261 2023-01-07

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>(){});

二、使用commons-beanutils

依赖包:

commons-beanutils

commons-beanutils

1.8.3

然后调用方法dyLkChQAzP:

/**

* 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.cldyLkChQAzPass);

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

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

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

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java抽象类、继承及多态和适配器的实现代码
下一篇:美邦快递物流查询单号查询(美邦达快递查询)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~