使⽤spring开发的⼈,对这⾏代码肯定不陌⽣,常⽤于DTO、VO、PO之间的复制。
/**
* 全属性copy对象
*
**/
但这⾏代码会将所有的属性都进⾏copy,有的时候我们想要个别属性不进⾏复制(⽐如:null值属性),这时就需要⽤到另⼀个⽅法:/**
* 忽略某些属性copy对象
*
**/
第三个参数是可变长类型,动态获取忽略的属性:
/**
* 获取需要忽略的属性
*
* @param source
* @return
*/
public static String[] getNullPropertyNames (Object source) {
fastjson忽略属性
final BeanWrapper src = new BeanWrapperImpl(source);
PropertyDescriptor[] pds = PropertyDescriptors();
Set<String> emptyNames = new HashSet<>();
for(PropertyDescriptor pd : pds) {
Object srcValue = Name());
// 此处判断可根据需求修改
if (srcValue == null) {
emptyNames.Name());
}
}
String[] result = new String[emptyNames.size()];
Array(result);
}
拓展⼀下下:
很多时候我们需要将Map与Bean之间转换,提供两种⽅式:
⼀、使⽤fastjson
1、map转bean:
Map paramMap = new HashMap();
String jsonStr = JSONString(paramMap);
Object infoDo = JSON.parseObject(jsonStr, Object.class);
2、bean转map:
Map<String, Object> map = JSON.JSONString(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, Property(source, property));
}
}
BeanUtils 在复制类时需要注意值为空的情况
此处引⽤的是 org.apachemons.beanutils.BeanUtils;
添加这⼀⾏代码,解决date 类型为空报错
这⼀⾏,可以解决 integer值为空时不⾃动赋值为0;
另外 double 可能也很特殊,我没研究。
注意这些后加的条件要放在pyProperties 之前。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。