最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

BeanUtils.copyProperties在拷貝屬性時忽略空值的操作

 更新時間:2021年06月16日 10:08:55   作者:葫蘆胡  
這篇文章主要介紹了BeanUtils.copyProperties在拷貝屬性時忽略空值的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

BeanUtils.copyProperties忽略空值

使用spring開發(fā)的人,對這行代碼肯定不陌生,常用于DTO、VO、PO之間的復(fù)制。

/**
* 全屬性copy對象
* 
**/
BeanUtils.copyProperties(Object source, Object target)

但這行代碼會將所有的屬性都進(jìn)行copy,有的時候我們想要個別屬性不進(jìn)行復(fù)制(比如:null值屬性),這時就需要用到另一個方法:

/**
* 忽略某些屬性copy對象
* 
**/
BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties)

第三個參數(shù)是可變長類型,動態(tài)獲取忽略的屬性:

/**
 * 獲取需要忽略的屬性
 * 
 * @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());
        // 此處判斷可根據(jù)需求修改
        if (srcValue == null) {
            emptyNames.add(pd.getName());
        }
    }
    String[] result = new String[emptyNames.size()];
    return emptyNames.toArray(result);
}

拓展一下下:

很多時候我們需要將Map與Bean之間轉(zhuǎn)換,提供兩種方式:

一、使用fastjson

1、map轉(zhuǎn)bean:

Map paramMap = new HashMap();
String jsonStr = JSONObject.toJSONString(paramMap);
Object infoDo = JSON.parseObject(jsonStr, Object.class);

2、bean轉(zhuǎn)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>

然后調(diào)用方法:

/**
 * Bean轉(zhuǎn)map
 * 
 * @param bean
 * @return
 */
public Map describe(Object bean);
 
/**
 * map轉(zhuǎn)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 在復(fù)制類時需要注意 值為空的情況

BeanUtils.copyProperties(dest, orig);

此處引用的是 org.apache.commons.beanutils.BeanUtils;

ConvertUtils.register(new DateConverter(null), java.util.Date.class);

添加這一行代碼,解決date 類型為空 報(bào)錯

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

這一行,可以解決 integer值為空時不自動賦值為0;

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

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

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringCloud集成zookeeper實(shí)現(xiàn)服務(wù)注冊并訪問功能

    SpringCloud集成zookeeper實(shí)現(xiàn)服務(wù)注冊并訪問功能

    zookeeper和eureka一樣,是用于充當(dāng)服務(wù)注冊功能服務(wù)器的一個springcloud插件,這篇文章主要介紹了SpringCloud集成zookeeper實(shí)現(xiàn)服務(wù)注冊并訪問,需要的朋友可以參考下
    2022-06-06
  • java線程池ThreadPoolExecutor的八種拒絕策略示例詳解

    java線程池ThreadPoolExecutor的八種拒絕策略示例詳解

    ThreadPoolExecutor是一個典型的緩存池化設(shè)計(jì)的產(chǎn)物,因?yàn)槌刈佑写笮?當(dāng)池子體積不夠承載時,就涉及到拒絕策略。JDK中已預(yù)設(shè)了?4?種線程池拒絕策略,下面結(jié)合場景詳細(xì)聊聊這些策略的使用場景以及還能擴(kuò)展哪些拒絕策略
    2021-11-11
  • Java 定時器(Timer,TimerTask)詳解及實(shí)例代碼

    Java 定時器(Timer,TimerTask)詳解及實(shí)例代碼

    這篇文章主要介紹了 Java 定時器(Timer,TimerTask)詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 帶你一文深入認(rèn)識Java?String類

    帶你一文深入認(rèn)識Java?String類

    這篇文章主要介紹了帶你一文深入認(rèn)識Java?String類,String 類在Java中是很常用的類,很重要的類,在后續(xù)的學(xué)習(xí)中經(jīng)常會用到,是后續(xù)學(xué)習(xí)的基礎(chǔ), 文章圍繞主題展開更多詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-06-06
  • 簡單了解JAVA構(gòu)造方法

    簡單了解JAVA構(gòu)造方法

    構(gòu)造方法作用就是對類進(jìn)行初始化。 如果你沒有定議任何構(gòu)造方法的形式,程式會為你取一個不帶任何參數(shù)的構(gòu)造函數(shù),那么你產(chǎn)生類的對像時只能用不帶參數(shù)的方法.下面小編和大家來一起學(xué)習(xí)一下吧
    2019-06-06
  • spring boot3整合AI組件及使用方法

    spring boot3整合AI組件及使用方法

    本文介紹了springboot開發(fā)后端服務(wù)中,AI組件(Spring AI)的整合與使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • Mybatis 中的一對一,一對多,多對多的配置原則示例代碼

    Mybatis 中的一對一,一對多,多對多的配置原則示例代碼

    這篇文章主要介紹了 Mybatis 中的一對一,一對多,多對多的配置原則示例代碼,需要的朋友可以參考下
    2017-03-03
  • 解決mybatisPlus 中的field-strategy配置失效問題

    解決mybatisPlus 中的field-strategy配置失效問題

    這篇文章主要介紹了解決mybatisPlus 中的field-strategy配置失效問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java去掉小數(shù)點(diǎn)后面無效0的方案與建議

    Java去掉小數(shù)點(diǎn)后面無效0的方案與建議

    當(dāng)前小數(shù)點(diǎn)后面的位數(shù)過多的時候,多余的0沒有實(shí)際意義,下面這篇文章主要給大家介紹了關(guān)于Java去掉小數(shù)點(diǎn)后面無效0的方案與建議,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 通過Spring Boot配置動態(tài)數(shù)據(jù)源訪問多個數(shù)據(jù)庫的實(shí)現(xiàn)代碼

    通過Spring Boot配置動態(tài)數(shù)據(jù)源訪問多個數(shù)據(jù)庫的實(shí)現(xiàn)代碼

    這篇文章主要介紹了通過Spring Boot配置動態(tài)數(shù)據(jù)源訪問多個數(shù)據(jù)庫的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2018-03-03

最新評論

炉霍县| 浙江省| 来凤县| 县级市| 祥云县| 缙云县| 绥德县| 新巴尔虎右旗| 新干县| 越西县| 枣阳市| 澄江县| 渝北区| 农安县| 合作市| 贵定县| 濮阳市| 容城县| 温州市| 清水县| 安仁县| 凤冈县| 嘉祥县| 苏尼特右旗| 巴青县| 霸州市| 馆陶县| 长宁区| 周口市| 青龙| 广饶县| 惠水县| 明溪县| 黄陵县| 万全县| 上高县| 汨罗市| 贵阳市| 博罗县| 尼勒克县| 镇赉县|