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

 更新时间:2021年09月01日 09:56:10   作者:今夜月色很美  
这篇文章主要介绍了BeanUtils.copyProperties()拷贝id属性失败的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

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

部分代码如下

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()源码中有一段判断如下:

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

BeanUtils.copyProperties(A,B);

是A中的值赋值给B

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

BeanUtils.copyProperties(A,B);

是B中的值赋值给A

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

相关文章

  • Java IO文件编码转换实现代码

    Java IO文件编码转换实现代码

    这篇文章主要介绍了Java IO文件编码转换实现代码,有需要的朋友可以参考一下
    2013-12-12
  • MyBatis-Plus updateById不更新null值的方法解决

    MyBatis-Plus updateById不更新null值的方法解决

    用Mybatis-Plus的updateById()来更新数据时,无法将字段设置为null值,更新后数据还是原来的值,本文就来详细的介绍一下解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • java输入空行结束问题

    java输入空行结束问题

    这篇文章主要介绍了java输入空行结束问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Java面向对象之继承的概念详解

    Java面向对象之继承的概念详解

    这篇文章主要介绍了Java面向对象之继承的概念详解,Java是一种面向对象的编程语言,继承是实现面向对象编程的基础之一。通过继承,我们可以使代码更具可读性、可重用性和可维护性,从而提高程序的效率和可靠性,需要的朋友可以参考下
    2023-04-04
  • Java下载远程服务器文件到本地(基于http协议和ssh2协议)

    Java下载远程服务器文件到本地(基于http协议和ssh2协议)

    这篇文章主要介绍了Java下载远程服务器文件到本地的方法(基于http协议和ssh2协议),帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2021-01-01
  • Spring MVC如何实现接口Controller定义控制器

    Spring MVC如何实现接口Controller定义控制器

    这篇文章主要介绍了Spring MVC如何实现接口Controller定义控制器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Maven本地仓库的配置以及修改默认.m2仓库位置

    Maven本地仓库的配置以及修改默认.m2仓库位置

    今天小编就为大家分享一篇关于Maven本地仓库的配置以及修改默认.m2仓库位置的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • SpringBoot实现自定义配置文件提示的方法

    SpringBoot实现自定义配置文件提示的方法

    这篇文章主要介绍了SpringBoot实现自定义配置文件提示的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • java中HashMap的7种遍历方式与性能分析

    java中HashMap的7种遍历方式与性能分析

    本文主要介绍了java中HashMap的7种遍历方式与性能分析,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java9新特性Module模块化编程示例演绎

    Java9新特性Module模块化编程示例演绎

    这篇文章主要为大家介绍了Java9新特性Module模块化编程的示例演绎,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03

最新评论