BeanUtils.copyProperties()拷貝id屬性失敗
po類中id有值,但是使用BeanUtils.copyProperties()拷貝出的vo類id屬性為null,檢查后發(fā)現(xiàn)是因?yàn)閜o繼承的父類聲明了一個泛型。
部分代碼如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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()源碼中有一段判斷如下:
1
|
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)為屬性類型不同,所以不會拷貝id屬性。
解決方法
暫不清楚po類extends AbstractEntity<Long>后為什么讀取到的類型不是Long而是父類型Serializable,暫時先不用泛型,把id類型直接定義為Long,問題解決~
BeanUtils.copyProperties 出錯
注意:屬性復(fù)制,不同jar中的方法,用法不一樣!
Spring 包(org.springframework.beans)中
1
|
BeanUtils.copyProperties(A,B); |
是A中的值賦值給B
Apache 包(org.apache.commons.beanutils)中(常用)
1
|
BeanUtils.copyProperties(A,B); |
是B中的值賦值給A
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/noob9527/article/details/90168244