欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

BeanUtils.copyProperties忽略空值

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

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

但這行代碼會將所有的屬性都進行copy,有的時候我們想要個別屬性不進行復(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 類型為空 報錯

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

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

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

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

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

相關(guān)文章

  • 詳解MyBatis中column屬性的總結(jié)

    詳解MyBatis中column屬性的總結(jié)

    在MyBatis的映射中有column這么一個屬性,我一直以為它映射的是數(shù)據(jù)庫表中的列名,但經(jīng)過學習發(fā)現(xiàn)他似乎映射的是SQL語句中的列名,或者說是查詢結(jié)果所得到的表的列名,這篇文章主要介紹了MyBatis中column屬性的總結(jié),需要的朋友可以參考下
    2022-09-09
  • SpringBoot詳解整合Spring?Boot?Admin實現(xiàn)監(jiān)控功能

    SpringBoot詳解整合Spring?Boot?Admin實現(xiàn)監(jiān)控功能

    這篇文章主要介紹了SpringBoot整合Spring?Boot?Admin實現(xiàn)服務(wù)監(jiān)控,內(nèi)容包括Server端服務(wù)開發(fā),Client端服務(wù)開發(fā)其中Spring?Boot?Admin還可以對其監(jiān)控的服務(wù)提供告警功能,如服務(wù)宕機時,可以及時以郵件方式通知運維人員,感興趣的朋友跟隨小編一起看看吧
    2022-07-07
  • java 單元測試 對h2數(shù)據(jù)庫數(shù)據(jù)清理方式

    java 單元測試 對h2數(shù)據(jù)庫數(shù)據(jù)清理方式

    這篇文章主要介紹了java 單元測試 對h2數(shù)據(jù)庫數(shù)據(jù)清理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • JDK8中的HashMap初始化和擴容機制詳解

    JDK8中的HashMap初始化和擴容機制詳解

    這篇文章主要介紹了JDK8中的HashMap初始化和擴容機制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring?question問題小結(jié)

    Spring?question問題小結(jié)

    在AppConfig配置類中,通過@Bean注解創(chuàng)建了Service和Controller的實例,Spring會自動將這些實例納入容器的管理,并處理它們之間的依賴關(guān)系,本文給大家介紹Spring?question問題小結(jié),感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • IDEA必備開發(fā)神器之EasyCode

    IDEA必備開發(fā)神器之EasyCode

    對于java程序員來說,日常工作中就是crud的操作,每次都要搭建MVC三層,還是很繁瑣,這里就出現(xiàn)了神器easycode的工具.可以快速生成代碼.并且還可以自定義模板.需要的朋友可以參考下
    2021-05-05
  • 使用XSD校驗Mybatis的SqlMapper配置文件的方法(2)

    使用XSD校驗Mybatis的SqlMapper配置文件的方法(2)

    這篇文章主要介紹了使用XSD校驗Mybatis的SqlMapper配置文件的方法(2)的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • Spring MVC學習教程之RequestMappingHandlerAdapter詳解

    Spring MVC學習教程之RequestMappingHandlerAdapter詳解

    這篇文章主要給大家介紹了關(guān)于Spring MVC學習教程之RequestMappingHandlerAdapter的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧
    2018-11-11
  • springboot項目中controller層與前端的參數(shù)傳遞方式

    springboot項目中controller層與前端的參數(shù)傳遞方式

    這篇文章主要介紹了springboot項目中controller層與前端的參數(shù)傳遞方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • SpringBoot與velocity的結(jié)合的示例代碼

    SpringBoot與velocity的結(jié)合的示例代碼

    本篇文章主要介紹了SpringBoot與velocity的結(jié)合的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03

最新評論