java中使用BeanUtils.copyProperties方法对象复制同名字段类型不同赋值为空问题解析

这篇具有很好参考价值的文章主要介绍了java中使用BeanUtils.copyProperties方法对象复制同名字段类型不同赋值为空问题解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

对象之间的复制,dto对象中字段类型为String,model中字段类型为BigDecimal。使用BeanUtils.copyProperties方法进行对象批量复制。


问题描述

提示:这里描述项目中遇到的问题:

使用Spring 的 BeanUtils.copyProperties 方法发现dto中的String类型字段无法转换为model中的BigDecimal类型同名字段。


原因分析:

使用Spring 的 BeanUtils.copyProperties 方法不支持不同类型同名字段赋值。


解决方案:

Spring的BeanUtils.copyProperties 方法替换为Apache Commons BeanUtils的copyProperties 方法。

代码分析:

1、Apache Commons BeanUtils的copyProperties方法

  1. 工具类方法

beanutils.copyproperties 类型不同,java,开发语言

  1. 进入方法

beanutils.copyproperties 类型不同,java,开发语言

  1. 拿到字段的name、value

beanutils.copyproperties 类型不同,java,开发语言

  1. 进入copyPropertry方法中有covertForCopy方法,对字段进行复制,并进行类型转换。

beanutils.copyproperties 类型不同,java,开发语言

beanutils.copyproperties 类型不同,java,开发语言

  1. 拿到目标对象中的字段类型,并进行值转换。

beanutils.copyproperties 类型不同,java,开发语言
beanutils.copyproperties 类型不同,java,开发语言
beanutils.copyproperties 类型不同,java,开发语言

最终完成String类型赋值到BigDecimal类型的同名字段上。

原因:
1、在 Spring 的 BeanUtils.copyProperties 方法中,并没有内置的类型转换功能。该方法主要用于将一个对象的属性值复制到另一个对象中,属性值的复制是按照字段名进行匹配的。
如果源对象的字段类型和目标对象的字段类型不匹配,Spring 的 BeanUtils.copyProperties 方法会直接复制字段值,而不会进行类型转换。这意味着如果源对象的字段类型是 String,而目标对象的字段类型是 BigDecimal,则不会自动将字符串转换为 BigDecimal。

2、Apache Commons BeanUtils 的 copyProperties 方法在复制属性时会根据源对象字段和目标对象字段的类型进行相应的转换。
当源对象和目标对象的相应字段类型不一致时,BeanUtils 会尝试进行类型转换。它使用 Java 内置的类型转换机制和一些自定义的转换规则来处理不同类型之间的转换。
在进行类型转换时,BeanUtils 会尽可能地使用内置的转换规则,例如使用适当的构造函数或转换方法。如果默认规则无法进行转换,则可以通过注册自定义的转换器来处理特定类型之间的转换。文章来源地址https://www.toymoban.com/news/detail-644934.html

到了这里,关于java中使用BeanUtils.copyProperties方法对象复制同名字段类型不同赋值为空问题解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决 BeanUtil.copyProperties 不同属性直接的复制

    1、引入hutool hutool官网 2、直接上例子  对象:User.java 对象:User1.java  主要关注 @Alias 注解。引入的时候需要主题引入的是hutool包的。引入其它包的不行 复制业务代码 执行结果

    2024年01月24日
    浏览(33)
  • hutool的BeanUtil.copyProperties复制枚举类属性大坑

            项目中需要使用到对象属性复制,于是使用hutool的BeanUtil.copyProperties方法。这个方法线上一直用着都没问题,然而最近修改代码后却突然报错: Can not convert XXX to  XXX。 结合代码得知,该报错为把Map中的字符串复制到Bean的枚举类属性,并为该属性设置对应对象时出现

    2024年02月05日
    浏览(47)
  • 简述PHP中trait的使用和同时引入多个trait时同名方法冲突的处理

    PHP的类是单一继承模式,也就是每个类只能继承一个父类(基类)。 但有时需要引入更多通用(共用)的方法,同时这些方法又不适合集成到基类。 那么这时,就需要使用其他方法来引入这些方法。其中 trait ,就是方法之一。 trait是PHP5.4之后出现的一种代码复用方法,形式

    2023年04月26日
    浏览(40)
  • Python依据某一文件夹中大量文件的名称复制另一文件夹中的同名文件

      本文介绍基于 Python 语言,针对一个 文件夹 下大量的 Excel 表格文件,基于其中 每一个文件 的名称,从 另一个文件夹 中找到与 这一文件夹 中文件同名的文件,并将找到的 同名文件 复制到 第三个文件夹 中的方法。   首先,我们来明确一下本文的具体需求。现有一个

    2024年02月05日
    浏览(52)
  • Java基础:对象的克隆(复制)

    假如想复制一个简单变量。很简单: 不仅int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。 但是如果你复制的是一个对象,情况就复杂了。 假设说我是一个beginner,我会这样写: 结果: 学生1:12345   学生2:12345   这里自定义学生类,该类

    2024年02月09日
    浏览(32)
  • java中实现对象属性复制的工具类

    Apache Commons BeanUtils 提供了 BeanUtils 类,可以方便地进行属性的复制。您可以使用 BeanUtils.copyProperties() 方法将一个对象的属性值复制到另一个对象中。例如: 请确保已经引入 Apache Commons BeanUtils 的相关依赖。 pom可以如下 例如: 请确保已经引入 Spring Framework 的相关依赖。(偷懒

    2024年02月16日
    浏览(33)
  • Java头歌 2.4 类和对象- 方法的使用

    任务描述 本关任务:定义一个用来和老师打招呼的方法。 相关知识 为了完成本关任务你需要掌握:1. 什么是方法; 2. 怎么定义和使用方法。 我们现阶段编写的代码都是放在 main 函数中,不过如果我们要做一个大型的项目,把所有的代码都放入 main 方法中有什么缺陷呢? 代

    2024年02月03日
    浏览(40)
  • Java中四种常用的数组复制的方法copyOf(),arraycop(),clone()和copyOfRange()的使用与区别

    所谓复制数组,是指将一个数组中的元素在另一个数组中进行复制。本文主要介绍关于 Java 里面的数组复制(拷贝)的几种方式和用法。 在 Java 中实现数组复制分别有以下 4 种方法: 1.Arrays 类的 copyOf() 方法 2.Arrays 类的 copyOfRange() 方法 3.System 类的 arraycopy() 方法 4.Object 类的

    2024年03月20日
    浏览(43)
  • 【Java】使用PowerMockito mock static方法/new对象/mock对象的public或private方法的简单示例

    1.1 打桩类的public static方法 测试用例中如果需要对public静态方法的打桩,针对测试类增加注解@RunWith(PowerMockRunner.class)同时针对静态方法所在的类增加注解@PrepareForTest({StaticMethod.class}),接着在测试用例调用方法之前增加 PowerMockito.mockStatic(StaticMethod.class); PowerMockito.when(StaticMet

    2024年01月24日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包