BeanUtils.copyProperties()拷貝id屬性失敗的原因及解決
BeanUtils.copyProperties()拷貝id屬性失敗
po類中id有值,但是使用BeanUtils.copyProperties()拷貝出的vo類id屬性為null,檢查后發(fā)現(xiàn)是因?yàn)閜o繼承的父類聲明了一個(gè)泛型。
部分代碼如下
public abstract class AbstractEntity<ID extends Serializable> implements Serializable { protected ID id; /**創(chuàng)建人*/ protected ID createdBy; /**創(chuàng)建時(shí)間*/ protected Date createdTime; /**最后一次修改人*/ protected ID lastModifiedBy; /**最后一次修改時(shí)間*/ protected Date lastModifiedTime; public void setId(ID id) { this.id = id; } public ID getId() { return this.id; }
查看BeanUtils.copyProperties()源碼中有一段判斷如下:
if (readMethod != null && ClassUtils.isAssignable(writeMethod.getParameterTypes()[0], readMethod.getReturnType()))
當(dāng)執(zhí)行到獲取vo類的writeMethod即setId()參數(shù)類型,結(jié)果是Long類型,而po類的readMethod即getId()返回值類型獲取到的結(jié)果卻是Serializable所以BeanUtils認(rèn)為屬性類型不同,所以不會(huì)拷貝id屬性。
解決方法
暫不清楚po類extends AbstractEntity<Long>后為什么讀取到的類型不是Long而是父類型Serializable,暫時(shí)先不用泛型,把id類型直接定義為L(zhǎng)ong,問(wèn)題解決~
BeanUtils.copyProperties 出錯(cuò)
注意:屬性復(fù)制,不同jar中的方法,用法不一樣!
Spring 包(org.springframework.beans)中
BeanUtils.copyProperties(A,B);
是A中的值賦值給B
Apache 包(org.apache.commons.beanutils)中(常用)
BeanUtils.copyProperties(A,B);
是B中的值賦值給A
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- BeanUtils.copyProperties()所有的空值不復(fù)制問(wèn)題
- 詳解BeanUtils.copyProperties()方法如何使用
- BeanUtils.copyProperties()參數(shù)的賦值順序說(shuō)明
- 基于Beanutils.copyProperties()的用法及重寫提高效率
- 關(guān)于兩個(gè)BeanUtils.copyProperties()的用法及區(qū)別
- BeanUtils.copyProperties()屬性名相同但是類型不同問(wèn)題
- Java中BeanUtils.copyProperties()詳解及應(yīng)用場(chǎng)景
相關(guān)文章
Spring連接Mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟
本文主要介紹了Spring連接Mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)步驟,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Java中多個(gè)線程交替循環(huán)執(zhí)行的實(shí)現(xiàn)
有些時(shí)候面試官經(jīng)常會(huì)問(wèn),兩個(gè)線程怎么交替執(zhí)行呀,本文就來(lái)詳細(xì)的介紹一下Java中多個(gè)線程交替循環(huán)執(zhí)行的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01springboot+vue2+elementui實(shí)現(xiàn)時(shí)間段查詢方法
這篇文章主要介紹了springboot+vue2+elementui實(shí)現(xiàn)時(shí)間段查詢方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-05-05Java按照List內(nèi)存儲(chǔ)的對(duì)象的某個(gè)字段進(jìn)行排序的實(shí)例
下面小編就為大家?guī)?lái)一篇Java按照List內(nèi)存儲(chǔ)的對(duì)象的某個(gè)字段進(jìn)行排序的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12IDEA2023.3.4開啟SpringBoot項(xiàng)目的熱部署(圖文)
本文使用的開發(fā)工具是idea,使用的是springboot框架開發(fā)的項(xiàng)目,配置熱部署,可以提高開發(fā)效率,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-02-02如何把Spring Cloud Data Flow部署在Kubernetes上
這篇文章主要介紹了把Spring Cloud Data Flow部署在Kubernetes上,再跑個(gè)任務(wù)試試,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Java生成的隨機(jī)數(shù)靠譜嗎?多少次會(huì)重復(fù)?
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java生成的隨機(jī)數(shù)靠不靠譜展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-06-06