beanutils.copyproperties属性值丢失_beanutils.populate用法

beanutils.copyproperties属性值丢失_beanutils.populate用法问题场景例如有个对象要提交,提交一次,第二次提交我们希望是对上次提交的完善。。那么用其他方式实现很麻烦,本身的BeanUtils.copyProperties也是不大支持。解决方案hutool开源库为我们提供了更为强大的Bean工具-BeanUtil,只需要一句代码就搞定BeanUtil.copyProperties(oldDetail.get(),userDetail,true,Copy…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

问题场景

例如有个对象要提交,提交一次,第二次提交我们希望是对上次提交的完善。。那么用其他方式实现很麻烦,本身的BeanUtils.copyProperties也是不大支持。

2020-12-19更新 新增了更好用的BeanMerge方法,可以直接完整的copy对象属性,把两个属性合成到一个上面,详情请参考 《比BeanCopy好用的BeanMerge(java合并对象属性,把非空属性合成到目标对象上)》

解决方案

hutool开源库为我们提供了更为强大的Bean工具-BeanUtil,

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>4.1.14</version>
</dependency>

以上问题,只需要一句代码就搞定!!!

BeanUtil.copyProperties(oldDetail.get(),userDetail,true, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));

核心代码是CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true)

详情可以参考官方文档 http://hutool.mydoc.io/#text_319433 。

更详细的业务场景如下:

public Object save(UserDetail userDetail){ 
   
        if(userDetail.getUserId()==0){ 
   
            return ApiReturnUtil.error("userId不能为空");
        }else{ 
   
        	//复制一个新的用于保存
         	UserDetail newDetail=new UserDetail();
            BeanUtil.copyProperties(userDetail,newDetail);
            Optional<UserDetail> oldDetail=userDetailRepository.findById(userDetail.getUserId());
            if (oldDetail.isPresent()){ 
   
                System.out.println("copying");
                //复制旧的属性过来,忽略null属性,忽略null值,有值的以新的为主,null的则以旧为主
                BeanUtil.copyProperties(oldDetail.get(),userDetail,true, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
            }
            //复制新的所有非null来覆盖旧的
            BeanUtil.copyProperties(userDetail,newDetail,true, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));

            userDetailRepository.save(newDetail);
            return  ApiReturnUtil.success("保存成功",newDetail);
        }
    }

CopyOptions配置项:

CopyOptions参数提供一些BeanUtils.copyProperties注入属性的选项。

使用方法如下:
BeanUtil.copyProperties(oldObject,newObject,true, CopyOptions.create().setXXXX(true));

  • editable 限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类。
  • ignoreNullValue 是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null
  • ignoreProperties 忽略的属性列表,设置一个属性列表,不拷贝这些属性值
  • ignoreError 是否忽略字段注入错误
    可以通过CopyOptions.create()方法创建一个默认的配置项,通过setXXX方法设置每个配置项。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186199.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号