BeanUtils.copyProperties复制对象结果为空的原因分析

目录
  • BeanUtils.copyProperties复制对象结果为空原因
    • 正确的包
    • 错误的包
    • 两个类的区别
  • BeanUtils.copyProperties拷贝没成功的坑,记录解决原因
    • 具体如下

BeanUtils.copyProperties复制对象结果为空原因

细心比对,发现原来是导错了包导致的

正确的包

import org.springframework.beans.BeanUtils;

错误的包

import org.apache.commons.beanutils.BeanUtils;

两个类的区别

  • 两者的copyProperties方法参数位置不同org.springframework.beans.BeanUtils: copyProperties(sourceDemo, targetDemo)
  • org.apache.commons.beanutils.BeanUtils: copyProperties(targetDemo, sourceDemo)
  • 要求两个Bean的属性名相同,且有对应的setXxx方法和getXxx方法。其实底层原理是使用sourceDemo的getXxx方法和targetDemo的setXxx方法
  • sourceDemo有的属性而targetDemo没有的属性,不会封装到targetDemo对象中;targetDemo有的属性而sourceDemo没有的属性,会封装到targetDemo中,数据为默认值(注意基本类型默认值与引用类型默认值不同)
  • 类型转换问题:基本类型与其对应的封装类型可以相互转换。org.springframework.beans.BeanUtils与org.apache.commons.beanutils.BeanUtils对于String和Date类型转换的情况是不同的

总结:发现其实只需要将两个对象换个位置就好了。。。

BeanUtils.copyProperties拷贝没成功的坑,记录解决原因

在使用BeanUtils时,会先引用对应的包,但是如果包引用不对的话,那么使用BeanUtils.copyProperties(Object value1, Object value2)进行数据拷贝,可能是value1拷贝到value2上;也有可能是value2拷贝到value1上。

具体如下

包org.apache.commons.beanutils.BeanUtils, 则结果是:

  • value2拷贝到value1上,即value2的值会覆盖到value1上;

包org.springframework.beans.BeanUtils, 则结果是:

  • value1拷贝到value2上,即value1的值会覆盖到value2上。

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

(0)

相关推荐

  • BeanUtils.copyProperties使用总结以及注意事项说明

    目录 1.前言 2.一般使用 3.拷贝属性时忽略空值 4.使用注意事项(1) 5.使用注意事项(2) 6.使用注意事项(3) 1.前言 开发过程中,讲一个对象的属性和值赋值到另一个对象上,大量使用了get.set方法,看着很臃肿,思考下肯定不只有我有这种想法,所以技术上肯定有方法能解决这个问题,所以查阅了一些资料发现了BeanUtils.copyProperties这个方法以下是这次所有的总结以及使用时的注意事项. 使用org.springframework.beans.BeanUtils.co

  • BeanUtils.copyProperties复制属性失败的原因及解决方案

    目录 BeanUtils.copyProperties复制属性失败 描述 解决办法 BeanUtils.copyProperties应用的改进 为解决这个问题我重写了部分spring BeanUtils的代码 BeanUtils.copyProperties复制属性失败 描述 在JavaE中使用 BeanUtils.copyProperties,把A对象的name.age等属性复制到B对象中,A与B对象的类型不同.出现的问题是复制属性失败,根本原因是 BeanUtils找不到set.get方法.

  • java Beanutils.copyProperties( )用法详解

    这是一篇开发自辩甩锅稿~~~~ 昨天测试小姐姐将我的一个bug单重开了,emmmm....内心OS:就调整下对象某个属性类型这么简单的操作,我怎么可能会出错呢,一定不是我的锅!!but再怎么抗拒,bug还是要改的,毕竟晚上就要发版本了~~ 老老实实将我前天改的部分跟了一遍,恩,完美,没有任何的缺失~~but本应success的测试数据,接口返还的结果确实是false来着,那还是老老实实debug吧. 一步步跟下来,恩,多么顺畅,就说一定不是我的锅~~诶?不对不对,这里的ID值,为啥是null?传

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

    目录 BeanUtils.copyProperties()拷贝id属性失败 部分代码如下 解决方法 BeanUtils.copyProperties 出错 BeanUtils.copyProperties()拷贝id属性失败 po类中id有值,但是使用BeanUtils.copyProperties()拷贝出的vo类id属性为null,检查后发现是因为po继承的父类声明了一个泛型. 部分代码如下 public abstract class AbstractEntity<ID extends Se

  • BeanUtils.copyProperties复制对象结果为空的原因分析

    目录 BeanUtils.copyProperties复制对象结果为空原因 正确的包 错误的包 两个类的区别 BeanUtils.copyProperties拷贝没成功的坑,记录解决原因 具体如下 BeanUtils.copyProperties复制对象结果为空原因 细心比对,发现原来是导错了包导致的 正确的包 import org.springframework.beans.BeanUtils; 错误的包 import org.apache.commons.beanutils.BeanUtil

  • BeanUtils.copyProperties复制不生效的解决

    目录 前言 问题的排查 问题的扩展 前言 呵呵 前端时间使用 BeanUtils.copyProperties 的时候碰到了一个这样的问题 我有两个实体, 有同样的属性, 一个有给定的属性的 getter, 另外一个有 给定的属性的 setter, 但是 我使用 BeanUtils.copyProperties 的时候 把来源对象的这个属性 复制不到 目标对象上面 然后 当时也跟踪了一下代码, 然后 这里整理一下 改代码片段吧 然后在调试的过程中 也发现了一些其他的问题, 呵呵 算是额外的了解吧

  • 如何使用BeanUtils.copyProperties进行对象之间的属性赋值

    1.使用org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get.set方法一个一个属性的赋值 /** * 对象属性拷贝 <br> * 将源对象的属性拷贝到目标对象 * * @param source 源对象 * @param target 目标对象 */ public static void copyProperties(Object source, Object target) { try { BeanU

  • php $_ENV为空的原因分析

    但有些朋友的$_ENV是空的,可能是原因是: 你的php.ini的variables_order值为"GPCS",也就是说系统在定义PHP预定义变量时的顺序是GET,POST,COOKIES,SERVER,没有定义Environment(E),你可以修改php.ini文件的variables_order值为你想要的顺序,如:"EGPCS".这时,$_ENV的值就可以取得了 EGPCS值(EGPCS是Environment.Get.Post.Cookies.Serve

  • 基于Beanutils.copyProperties()的用法及重写提高效率

    目录 Beanutils.copyProperties()用法及重写提高效率 一.简介 二.用法 三.重写 原理 BeanUtils.copyProperties 使用注意 示例演示 开始进行示例 最后强调 Beanutils.copyProperties()用法及重写提高效率 特别说明本文介绍的是Spring(import org.springframework.beans.BeanUtils)中的BeanUtils.copyProperties(A,B)方法.是将A中的值赋给B.apache

  • BeanUtils.copyProperties()所有的空值不复制问题

    目录 BeanUtils.copyProperties()所有的空值不复制 第一种情况 第二种情况 BeanUtils.copyProperties()的用法和注意点 属性为null也会被复制,内部类不会复制过去 注意点一 注意点二 BeanUtils.copyProperties()所有的空值不复制 第一种情况 所有为空值的属性都不copy 直接上代码吧~ public class UpdateUtil { /** * 所有为空值的属性都不copy * * @param source * @p

  • 解决Beanutils.copyproperties实体类对象不一致的问题

    今天给大家分析一个解决Beanutils.copyproperties实体类对象名不一致的解决方法,一般我们在两个对象拷贝的问题上,我个人用的比较多的就是Beanutils.copyproperties,字段名如果不一致的话就去实体类中使用重载,把当前实体类的对象赋值给另外一个对象,也有用到set(),当然这些也都能解决Beanutils.copyproperties实体类属性不一致的问题,不过今天要给大家分享的是,不用set()和实体类的重构,使用类的反射机制去完成! 话不多说直接开始: 我是

  • 解决BeanUtils.copyProperties不支持复制集合的问题

    工作中,经常使用Spring的工具类BeanUtils.copyProperties对bean属性进行复制,这里的复制属于浅复制.且不能复制集合和数组.本文会对该工具进行一些测试. 文末会提出复制集合属性的解决方案 准备工作:准备测试需要的类 @Data public class Class { private People[] member; private People teacher; private List<People> student; } @Data @NoArgsConstr

  • BeanUtils.copyProperties在拷贝属性时忽略空值的操作

    BeanUtils.copyProperties忽略空值 使用spring开发的人,对这行代码肯定不陌生,常用于DTO.VO.PO之间的复制. /** * 全属性copy对象 * **/ BeanUtils.copyProperties(Object source, Object target) 但这行代码会将所有的属性都进行copy,有的时候我们想要个别属性不进行复制(比如:null值属性),这时就需要用到另一个方法: /** * 忽略某些属性copy对象 * **/ BeanUtils.co

随机推荐