服务器之家

服务器之家 > 正文

BeanUtils.copyProperties()拷贝id属性失败的原因及解决

时间:2021-12-13 13:29     来源/作者:今夜月色很美

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/noob9527/article/details/90168244

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部