BeanUtils.copyProperties在拷贝属性时忽略空值的操作
BeanUtils.copyProperties忽略空值
使用spring开发的人,对这行代码肯定不陌生,常用于DTO、VO、PO之间的复制。
BeanUtils.copyProperties(Object source, Object target)
但这行代码会将所有的属性都进行copy,有的时候我们想要个别属性不进行复制(比如:null值属性),这时就需要用到另一个方法:
BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties)
第三个参数是可变长类型,动态获取忽略的属性:
public static String[] getNullPropertyNames (Object source) {
final BeanWrapper class="lazy" data-src = new BeanWrapperImpl(source);
PropertyDescriptor[] pds = class="lazy" data-src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<>();
for(PropertyDescriptor pd : pds) {
Object class="lazy" data-srcValue = class="lazy" data-src.getPropertyValue(pd.getName());
// 此处判断可根据需求修改
if (class="lazy" data-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>
然后调用方法:
public Map describe(Object bean);
public void populate (Object bean, Map map);
同时可以按指定的属性列表copy对象:
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 之前。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341