package com.yunphant.iie.utils;
import lombok.extern.slf4j.Slf4j;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class EntityMapTransUtils {
/**
* Java实体类转Map
* @param obj
* @return
*/
public static Map<String, Object> entityToMap1(Object obj){
Map<String, Object> map = new HashMap<String, Object>();
Class<?> clazz = obj.getClass();
for(Field field : clazz.getDeclaredFields()){
field.setAccessible(true);
String fieldName = field.getName();
Object object = null;
try {
object = field.get(obj);
} catch (IllegalArgumentException | IllegalAccessException e) {
log.info(e.getMessage());
}
map.put(fieldName, object);
}
return map;
}
/**
* Java实体类转Map
* @param obj
* @return
*/
public static Map<String, Object> entityToMap2(Object obj){
Map<String, Object> map = new HashMap<String, Object>();
try {
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
// 过滤class属性
if (!key.equals("class")) {
// 得到property对应的getter方法
Method getter = property.getReadMethod();
Object value = getter.invoke(obj);
map.put(key, value);
}
}
} catch (Exception e) {
log.info(e.getMessage());
}
return map;
}
/**
* Map转实体类:要转换的Map的key跟实体类属性名相同的数据会转过去,不相同的字段会为null
* @param clazz
* @param map
* @return
*/
public static <T> T mapToEntity1(Class<T> clazz,Map<String, Object> map){
T obj = null;
try {
BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
obj = clazz.newInstance(); // 创建 JavaBean 对象
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
// 给 JavaBean 对象的属性赋值
for (int i = 0; i < propertyDescriptors.length; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName = descriptor.getName();
if (map.containsKey(propertyName)) {
Object value = map.get(propertyName);
Object[] args = new Object[1];
args[0] = value;
try {
descriptor.getWriteMethod().invoke(obj, args);
} catch (InvocationTargetException e) {
log.info(e.getMessage());
}
}
}
} catch (IllegalAccessException e) {
log.info(e.getMessage());
} catch (IntrospectionException e) {
log.info(e.getMessage());
} catch (IllegalArgumentException e) {
log.info(e.getMessage());
} catch (InstantiationException e) {
log.info(e.getMessage());
}
return (T)obj;
}
}
JAVA Map与 实体类 互相转换
最新推荐文章于 2023-10-24 11:21:16 发布