BeanUtils.copyProperties()拷貝id屬性失敗的原因及解決
BeanUtils.copyProperties()拷貝id屬性失敗
po類中id有值,但是使用BeanUtils.copyProperties()拷貝出的vo類id屬性為null,檢查后發(fā)現(xiàn)是因為po繼承的父類聲明了一個泛型。
部分代碼如下
public abstract class AbstractEntity<ID extends Serializable> implements Serializable { protected ID id; /**創(chuàng)建人*/ protected ID createdBy; /**創(chuàng)建時間*/ protected Date createdTime; /**最后一次修改人*/ protected ID lastModifiedBy; /**最后一次修改時間*/ 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()))
當執(zhí)行到獲取vo類的writeMethod即setId()參數(shù)類型,結果是Long類型,而po類的readMethod即getId()返回值類型獲取到的結果卻是Serializable所以BeanUtils認為屬性類型不同,所以不會拷貝id屬性。
解決方法
暫不清楚po類extends AbstractEntity<Long>后為什么讀取到的類型不是Long而是父類型Serializable,暫時先不用泛型,把id類型直接定義為Long,問題解決~
BeanUtils.copyProperties 出錯
注意:屬性復制,不同jar中的方法,用法不一樣!
Spring 包(org.springframework.beans)中
BeanUtils.copyProperties(A,B);
是A中的值賦值給B
Apache 包(org.apache.commons.beanutils)中(常用)
BeanUtils.copyProperties(A,B);
是B中的值賦值給A
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring連接Mysql數(shù)據(jù)庫的實現(xiàn)步驟
本文主要介紹了Spring連接Mysql數(shù)據(jù)庫的實現(xiàn)步驟,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03Java中多個線程交替循環(huán)執(zhí)行的實現(xiàn)
有些時候面試官經(jīng)常會問,兩個線程怎么交替執(zhí)行呀,本文就來詳細的介紹一下Java中多個線程交替循環(huán)執(zhí)行的實現(xiàn),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2024-01-01springboot+vue2+elementui實現(xiàn)時間段查詢方法
這篇文章主要介紹了springboot+vue2+elementui實現(xiàn)時間段查詢方法,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-05-05Java按照List內(nèi)存儲的對象的某個字段進行排序的實例
下面小編就為大家?guī)硪黄狫ava按照List內(nèi)存儲的對象的某個字段進行排序的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12IDEA2023.3.4開啟SpringBoot項目的熱部署(圖文)
本文使用的開發(fā)工具是idea,使用的是springboot框架開發(fā)的項目,配置熱部署,可以提高開發(fā)效率,文中通過圖文介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2024-02-02如何把Spring Cloud Data Flow部署在Kubernetes上
這篇文章主要介紹了把Spring Cloud Data Flow部署在Kubernetes上,再跑個任務試試,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08