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

网友投稿 1221 2022-12-13

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

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

目录BeanUtils.copyProperties()拷贝id属性失败部分代码如下解决方法BeanUtils.copyProperties 出错

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

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

部分代码如下

public abstract class AbstractEntity

protected ID id;

/**创建人*/

protected ID createdBy;

/**创建时间*/

protected Date createdTime;

/**最后一次修改人*/

protected ID lastModifiedBy;

/**最后一次修改时间*/

protected Date lahttp://stModifiedTime;

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()))

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

解决方法

暂不清楚po类extends AbstractEntity后为什么读取到的类型不是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

protected ID id;

/**创建人*/

protected ID createdBy;

/**创建时间*/

protected Date createdTime;

/**最后一次修改人*/

protected ID lastModifiedBy;

/**最后一次修改时间*/

protected Date lahttp://stModifiedTime;

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()))

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

解决方法

暂不清楚po类extends AbstractEntity后为什么读取到的类型不是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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:BeanUtils.copyProperties复制不生效的解决
下一篇:一篇文章带你玩转go语言的接口
相关文章

 发表评论

暂时没有评论,来抢沙发吧~