java使用BeanUtils.copyProperties方法對象復(fù)制同名字段類型不同賦值為空問題解決方案
項目場景:
對象之間的復(fù)制,dto對象中字段類型為String,model中字段類型為BigDecimal。使用BeanUtils.copyProperties方法進(jìn)行對象批量復(fù)制。
問題描述
提示:這里描述項目中遇到的問題:
使用Spring 的 BeanUtils.copyProperties 方法發(fā)現(xiàn)dto中的String類型字段無法轉(zhuǎn)換為model中的BigDecimal類型同名字段。
原因分析:
使用Spring 的 BeanUtils.copyProperties 方法不支持不同類型同名字段賦值。
解決方案:
將Spring的BeanUtils.copyProperties 方法替換為Apache Commons BeanUtils的copyProperties 方法。
代碼分析:
1、Apache Commons BeanUtils的copyProperties方法 工具類方法

進(jìn)入方法

拿到字段的name、value

進(jìn)入copyPropertry方法中有covertForCopy方法,對字段進(jìn)行復(fù)制,并進(jìn)行類型轉(zhuǎn)換。


拿到目標(biāo)對象中的字段類型,并進(jìn)行值轉(zhuǎn)換。



最終完成String類型賦值到BigDecimal類型的同名字段上。
原因:
1、在 Spring 的 BeanUtils.copyProperties 方法中,并沒有內(nèi)置的類型轉(zhuǎn)換功能。該方法主要用于將一個對象的屬性值復(fù)制到另一個對象中,屬性值的復(fù)制是按照字段名進(jìn)行匹配的。
如果源對象的字段類型和目標(biāo)對象的字段類型不匹配,Spring 的 BeanUtils.copyProperties 方法會直接復(fù)制字段值,而不會進(jìn)行類型轉(zhuǎn)換。這意味著如果源對象的字段類型是 String,而目標(biāo)對象的字段類型是 BigDecimal,則不會自動將字符串轉(zhuǎn)換為 BigDecimal。
2、Apache Commons BeanUtils 的 copyProperties 方法在復(fù)制屬性時會根據(jù)源對象字段和目標(biāo)對象字段的類型進(jìn)行相應(yīng)的轉(zhuǎn)換。
當(dāng)源對象和目標(biāo)對象的相應(yīng)字段類型不一致時,BeanUtils 會嘗試進(jìn)行類型轉(zhuǎn)換。它使用 Java 內(nèi)置的類型轉(zhuǎn)換機(jī)制和一些自定義的轉(zhuǎn)換規(guī)則來處理不同類型之間的轉(zhuǎn)換。
在進(jìn)行類型轉(zhuǎn)換時,BeanUtils 會盡可能地使用內(nèi)置的轉(zhuǎn)換規(guī)則,例如使用適當(dāng)?shù)臉?gòu)造函數(shù)或轉(zhuǎn)換方法。如果默認(rèn)規(guī)則無法進(jìn)行轉(zhuǎn)換,則可以通過注冊自定義的轉(zhuǎn)換器來處理特定類型之間的轉(zhuǎn)換。
總結(jié)
到此這篇關(guān)于java使用BeanUtils.copyProperties方法對象復(fù)制同名字段類型不同賦值為空問題解決方案的文章就介紹到這了,更多相關(guān)BeanUtils.copyProperties不支持不同類型同名字段賦值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis-Plus多表聯(lián)查(動態(tài)查詢)的項目實踐
本文主要介紹了MyBatis-Plus多表聯(lián)查(動態(tài)查詢)的項目實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
SpringBoot使用redis實現(xiàn)session共享功能
這篇文章主要介紹了pringboot項目使用redis實現(xiàn)session共享,文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-05-05
Java中==符號與equals()的使用詳解(測試兩個變量是否相等)
下面小編就為大家?guī)硪黄狫ava中==符號與equals()的使用詳解(測試兩個變量是否相等)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
springboot?log4j2日志框架整合與使用過程解析
這篇文章主要介紹了springboot?log4j2日志框架整合與使用,包括引入maven依賴和添加配置文件log4j2-spring.xml的相關(guān)知識,需要的朋友可以參考下2022-05-05
基于logback實現(xiàn)純java版本的SDK組件
這篇文章主要介紹了基于logback實現(xiàn)純java版本的SDK組件,在項目開發(fā)過程中通常會使用logback作為日志記錄的依賴工具,使用方式是引入logback相關(guān)jar包,然后配置logback.xml配置文件的方式來實現(xiàn),需要的朋友可以參考下2023-11-11

