1. package com.rscode.credits.util;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Set;
  5.  
  6. import org.springframework.beans.BeanUtils;
  7. import org.springframework.beans.BeanWrapper;
  8. import org.springframework.beans.BeanWrapperImpl;
  9. /**
  10. * @author 作者 tn
  11. * @version 创建时间:2018年11月13日
  12. * 类说明 复制bean
  13. */
  14. public class BeanCopyUtil {
  15. //source中的非空属性复制到target中
  16. /**
  17. *
  18. * @param source 源
  19. * @param target 目标
  20. */
  21. public static <T> void beanCopy(T source, T target) {
  22. BeanUtils.copyProperties(source, target, getNullPropertyNames(source));
  23. }
  24. //source中的非空属性复制到target中,但是忽略指定的属性,也就是说有些属性是不可修改的(个人业务需要)
  25. public static <T> void beanCopyWithIngore(T source, T target, String... ignoreProperties) {
  26. String[] pns = getNullAndIgnorePropertyNames(source, ignoreProperties);
  27. BeanUtils.copyProperties(source, target, pns);
  28. }
  29. public static String[] getNullAndIgnorePropertyNames(Object source, String... ignoreProperties) {
  30. Set<String> emptyNames = getNullPropertyNameSet(source);
  31. for (String s : ignoreProperties) {
  32. emptyNames.add(s);
  33. }
  34. String[] result = new String[emptyNames.size()];
  35. return emptyNames.toArray(result);
  36. }
  37. public static String[] getNullPropertyNames(Object source) {
  38. Set<String> emptyNames = getNullPropertyNameSet(source);
  39. String[] result = new String[emptyNames.size()];
  40. return emptyNames.toArray(result);
  41. }
  42. public static Set<String> getNullPropertyNameSet(Object source) {
  43. final BeanWrapper src = new BeanWrapperImpl(source);
  44. java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();
  45. Set<String> emptyNames = new HashSet<>();
  46. for (java.beans.PropertyDescriptor pd : pds) {
  47. Object srcValue = src.getPropertyValue(pd.getName());
  48. if (srcValue == null) emptyNames.add(pd.getName());
  49. }
  50. return emptyNames;
  51. }
  52. }

BeanCopyUtil的更多相关文章

  1. java 数据脱敏

    所谓数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份 ...

  2. BeanUtils 如何拷贝 List?

    BeanUtils 如何拷贝 List? 一.背景 我们在DO.Model.VO层数据间可能经常转换数据: Entity对应的是持久层数据结构(一般是数据库表的映射模型); Model 对应的是业务层 ...

  3. 【Springboot】FastJson与Jackson全局序列化方式的配置和相关工具类

    springboot 版本: <parent> <groupId>org.springframework.boot</groupId> <artifactId ...

随机推荐

  1. python dns

  2. 本地安装了Maven但Eclipse的Preferences中没有Maven怎么办?

    Maven是帮助我们进行项目构建管理的一个重要工具,Emmmmmm,因为还是个小白,这里就不装大明白了,就我目前了解Maven是用来管理jar包的,想要在Eclipse上运行就要将它集成到Eclips ...

  3. L1-060 心理阴影面积

    这是一幅心理阴影面积图.我们都以为自己可以匀速前进(图中蓝色直线),而拖延症晚期的我们往往执行的是最后时刻的疯狂赶工(图中的红色折线).由红.蓝线围出的面积,就是我们在做作业时的心理阴影面积. 现给出 ...

  4. Docker容器的管理

    创建容器的工作原理: 当利用docker run来创建容器时,Docker在后台运行的标准操作包括:检查本地是否存在指定的镜像,不存在就从公有仓库下载,利用镜像创建并启动一个容器分配一个文件系统,并在 ...

  5. TCP聊天工具的实现

    由于本人天生愚钝,所以关于聊天工具的编程一直都没学会,尽管网上教程一大堆,但是关于IdTCPClient  IdTCPServer 的不多,今天终于学会一些,分享给像我一样纠结的小伙伴,下一步学习多线 ...

  6. struts2的文件配置以及注释代码

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-/ ...

  7. unigui的页面布局使用

    (unigui的页面布局还是很强大的,基本什么的排版都能搞好.前面部分为原文章翻译,翻译不一定很准确,就能看吧,后面有使用说明,有什么不明白的欢迎加我QQ(910300653)一起交流学习) 一.布局 ...

  8. Window下,利用Anaconda2创建jupyter-notebook的python3环境方法

    随着深度学习的火热,越来越多的人去学习和了解这门技术.而做算法的同学为了能够更快,更高效的写出相关的深度学习算法出来,需要比较方便的开发环境.今天主要介绍一下在jupyter notebook中,新增 ...

  9. 2017年5月17日20:14:29 rabbitmq 消费 异常信息无法处理 导致轮询

    同事说如果同步的配置的正确的话不会出现这种问题 只有异常的情况下才会,但是 我就真的出现了//TODO 等我有时间的时候再查查看. 如果是异步的出现这种问题的话 包进AmqpRejectAndDont ...

  10. vue-router 学习

    Vue.js的一大特色就是构建单页面应用十分方便,既然要方便构建单页面应用那么自然少不了路由,vue-router就是vue官方提供的一个路由框架.总体来说,vue-router设计得简单好用,下面就 ...