BeanCopyUtil
- package com.rscode.credits.util;
- import java.util.HashSet;
- import java.util.Set;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.BeanWrapper;
- import org.springframework.beans.BeanWrapperImpl;
- /**
- * @author 作者 tn
- * @version 创建时间:2018年11月13日
- * 类说明 复制bean
- */
- public class BeanCopyUtil {
- //source中的非空属性复制到target中
- /**
- *
- * @param source 源
- * @param target 目标
- */
- public static <T> void beanCopy(T source, T target) {
- BeanUtils.copyProperties(source, target, getNullPropertyNames(source));
- }
- //source中的非空属性复制到target中,但是忽略指定的属性,也就是说有些属性是不可修改的(个人业务需要)
- public static <T> void beanCopyWithIngore(T source, T target, String... ignoreProperties) {
- String[] pns = getNullAndIgnorePropertyNames(source, ignoreProperties);
- BeanUtils.copyProperties(source, target, pns);
- }
- public static String[] getNullAndIgnorePropertyNames(Object source, String... ignoreProperties) {
- Set<String> emptyNames = getNullPropertyNameSet(source);
- for (String s : ignoreProperties) {
- emptyNames.add(s);
- }
- String[] result = new String[emptyNames.size()];
- return emptyNames.toArray(result);
- }
- public static String[] getNullPropertyNames(Object source) {
- Set<String> emptyNames = getNullPropertyNameSet(source);
- String[] result = new String[emptyNames.size()];
- return emptyNames.toArray(result);
- }
- public static Set<String> getNullPropertyNameSet(Object source) {
- final BeanWrapper src = new BeanWrapperImpl(source);
- java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();
- Set<String> emptyNames = new HashSet<>();
- for (java.beans.PropertyDescriptor pd : pds) {
- Object srcValue = src.getPropertyValue(pd.getName());
- if (srcValue == null) emptyNames.add(pd.getName());
- }
- return emptyNames;
- }
- }
BeanCopyUtil的更多相关文章
- java 数据脱敏
所谓数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份 ...
- BeanUtils 如何拷贝 List?
BeanUtils 如何拷贝 List? 一.背景 我们在DO.Model.VO层数据间可能经常转换数据: Entity对应的是持久层数据结构(一般是数据库表的映射模型); Model 对应的是业务层 ...
- 【Springboot】FastJson与Jackson全局序列化方式的配置和相关工具类
springboot 版本: <parent> <groupId>org.springframework.boot</groupId> <artifactId ...
随机推荐
- python dns
- 本地安装了Maven但Eclipse的Preferences中没有Maven怎么办?
Maven是帮助我们进行项目构建管理的一个重要工具,Emmmmmm,因为还是个小白,这里就不装大明白了,就我目前了解Maven是用来管理jar包的,想要在Eclipse上运行就要将它集成到Eclips ...
- L1-060 心理阴影面积
这是一幅心理阴影面积图.我们都以为自己可以匀速前进(图中蓝色直线),而拖延症晚期的我们往往执行的是最后时刻的疯狂赶工(图中的红色折线).由红.蓝线围出的面积,就是我们在做作业时的心理阴影面积. 现给出 ...
- Docker容器的管理
创建容器的工作原理: 当利用docker run来创建容器时,Docker在后台运行的标准操作包括:检查本地是否存在指定的镜像,不存在就从公有仓库下载,利用镜像创建并启动一个容器分配一个文件系统,并在 ...
- TCP聊天工具的实现
由于本人天生愚钝,所以关于聊天工具的编程一直都没学会,尽管网上教程一大堆,但是关于IdTCPClient IdTCPServer 的不多,今天终于学会一些,分享给像我一样纠结的小伙伴,下一步学习多线 ...
- struts2的文件配置以及注释代码
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-/ ...
- unigui的页面布局使用
(unigui的页面布局还是很强大的,基本什么的排版都能搞好.前面部分为原文章翻译,翻译不一定很准确,就能看吧,后面有使用说明,有什么不明白的欢迎加我QQ(910300653)一起交流学习) 一.布局 ...
- Window下,利用Anaconda2创建jupyter-notebook的python3环境方法
随着深度学习的火热,越来越多的人去学习和了解这门技术.而做算法的同学为了能够更快,更高效的写出相关的深度学习算法出来,需要比较方便的开发环境.今天主要介绍一下在jupyter notebook中,新增 ...
- 2017年5月17日20:14:29 rabbitmq 消费 异常信息无法处理 导致轮询
同事说如果同步的配置的正确的话不会出现这种问题 只有异常的情况下才会,但是 我就真的出现了//TODO 等我有时间的时候再查查看. 如果是异步的出现这种问题的话 包进AmqpRejectAndDont ...
- vue-router 学习
Vue.js的一大特色就是构建单页面应用十分方便,既然要方便构建单页面应用那么自然少不了路由,vue-router就是vue官方提供的一个路由框架.总体来说,vue-router设计得简单好用,下面就 ...