我是靠谱客的博主 缥缈香水,这篇文章主要介绍BeanUtils.copyProperties()拷贝id属性失败的原因及解决,现在分享给大家,希望可以做个参考。

BeanUtils.copyProperties()拷贝id属性失败

po类中id有值,但是使用BeanUtils.copyProperties()拷贝出的vo类id属性为null,检查后发现是因为po继承的父类声明了一个泛型。

部分代码如下

复制代码
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; /**创建人*/ protected ID createdBy; /**创建时间*/ 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()))

当执行到获取vo类的writeMethod即setId()参数类型,结果是Long类型,而po类的readMethod即getId()返回值类型获取到的结果却是Serializable所以BeanUtils认为属性类型不同,所以不会拷贝id属性。

解决方法

暂不清楚po类extends AbstractEntity<Long>后为什么读取到的类型不是Long而是父类型Serializable,暂时先不用泛型,把id类型直接定义为Long,问题解决~

BeanUtils.copyProperties 出错

注意:属性复制,不同jar中的方法,用法不一样!

Spring 包(org.springframework.beans)中

复制代码
1
BeanUtils.copyProperties(A,B);

是A中的值赋值给B

Apache 包(org.apache.commons.beanutils)中(常用)

复制代码
1
BeanUtils.copyProperties(A,B);

是B中的值赋值给A

以上为个人经验,希望能给大家一个参考,也希望大家多多支持靠谱客。

最后

以上就是缥缈香水最近收集整理的关于BeanUtils.copyProperties()拷贝id属性失败的原因及解决的全部内容,更多相关BeanUtils.copyProperties()拷贝id属性失败内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(184)

评论列表共有 0 条评论

立即
投稿
返回
顶部