您好,登錄后才能下訂單哦!
本篇內容主要講解“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之間轉換,提供兩種方式:
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>>(){});
依賴包:
<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.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在拷貝屬性時如何忽略空值”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。