亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

BeanUtils.copyProperties在拷貝屬性時如何忽略空值

發布時間:2021-06-16 13:40:11 來源:億速云 閱讀:1596 作者:chen 欄目:開發技術

本篇內容主要講解“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<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之間轉換,提供兩種方式:

一、使用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>

然后調用方法:

/**
 * 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 在復制類時需要注意 值為空的情況

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在拷貝屬性時如何忽略空值”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

衡阳县| 舟山市| 徐水县| 巴彦淖尔市| 油尖旺区| 瓦房店市| 辽源市| 昌宁县| 喜德县| 阿拉善盟| 百色市| 闽清县| 宜兰市| 巴东县| 平罗县| 莱阳市| 隆昌县| 温泉县| 米泉市| 塘沽区| 尤溪县| 黄冈市| 平和县| 高邮市| 连江县| 肇州县| 安泽县| 鸡西市| 英吉沙县| 西乌| 石门县| 南通市| 海淀区| 德昌县| 芜湖市| 阿图什市| 府谷县| 淮滨县| 拜泉县| 沙田区| 勃利县|