Bean拷贝转换工具类
Posted 洛阳泰山
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bean拷贝转换工具类相关的知识,希望对你有一定的参考价值。
pom文件依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeanWrapperImpl;
import java.beans.FeatureDescriptor;
import java.lang.reflect.Field;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Bean拷贝工具类
*
* @author tarzan liu
* @version V1.0
* @date 2021年5月11日
*/
public class BeanUtil {
/**
* 方法描述 不copy为null的属性
*
* @param @param source
* @param @param target
* @return void
* @throws
*/
public static void copyPropertiesExcludeNull(Object source, Object target) {
BeanWrapperImpl wrappedSource = new BeanWrapperImpl(source);
String[] ignoreProperties = Stream.of(wrappedSource.getPropertyDescriptors()).map(FeatureDescriptor::getName).filter(propertyName -> wrappedSource.getPropertyValue(propertyName) == null)
.toArray(String[]::new);
BeanUtils.copyProperties(source, target, ignoreProperties);
}
/**
* 复制bean的属性
*
* @param source 源 要复制的对象
* @param target 目标 复制到此对象
*/
public static void copyProperties(Object source, Object target) {
BeanUtils.copyProperties(source, target);
}
/**
* 复制对象
*
* @param source 源 要复制的对象
* @param target 目标 复制到此对象
* @param <T>
* @return
*/
public static <T> T copy(Object source, Class<T> target) {
try {
T newInstance = target.newInstance();
BeanUtils.copyProperties(source, newInstance);
return newInstance;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 复制list
*
* @param source
* @param target
* @param <T>
* @param <K>
* @return
*/
public static <T, K> List<K> copyList(List<T> source, Class<K> target) {
if (null == source || source.isEmpty()) {
return Collections.emptyList();
}
return source.stream().map(e -> copy(e, target)).collect(Collectors.toList());
}
public static <T> Map<String, T> objectToMap(Object requestParameters) {
Map<String, T> map = new HashMap<>();
// 获取f对象对应类中的所有属性域
Field[] fields = requestParameters.getClass().getDeclaredFields();
for (int i = 0, len = fields.length; i < len; i++) {
String varName = fields[i].getName();
// 获取原来的访问控制权限
boolean accessFlag = fields[i].isAccessible();
// 修改访问控制权限
fields[i].setAccessible(true);
// 获取在对象f中属性fields[i]对应的对象中的变量
Object o = null;
try {
o = fields[i].get(requestParameters);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (o != null && StringUtils.isNotBlank(o.toString().trim())) {
map.put(varName, (T) o);
// 恢复访问控制权限
fields[i].setAccessible(accessFlag);
}
}
return map;
}
}
以上是关于Bean拷贝转换工具类的主要内容,如果未能解决你的问题,请参考以下文章