import com.alibaba.fastjson.JSON;
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Field;
import java.util.*;
/**
* Map工具类
*/
public class MapUtil {
/**
* @param obj 实体对象
* @return Map 实体对象转换后的Map
*/
public static Map<String, Object> objectToMap(Object obj) {
Map<String, Object> map = new HashMap<>();
if (obj == null) {
return map;
}
Class clazz = obj.getClass();
//这个方法得不到父类字段
Field[] fields = clazz.getDeclaredFields();
//使用递归获取所有的字段
List<Field> fieldList = new ArrayList<>() ;
while (clazz != null) {//当父类为null的时候说明到达了最上层的父类(Object类).
fieldList.addAll(Arrays.asList(clazz.getDeclaredFields()));
clazz = clazz.getSuperclass(); //得到父类,然后赋给自己
}
try {
for (Field field : fieldList) {
//field.setAccessible(true); 会有安全问题
ReflectionUtils.makeAccessible(field);
map.put(field.getName(), field.get(obj));
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/**
* @param map map实体对象包含属性
* @param clazz 实体对象类型
* @return Object Map数据转换后的对象
*/
public static <T> T mapToObject(Map<String, Object> map, Class<T> clazz) {
return JSON.parseObject(JSON.toJSONString(map), clazz);
}
/**
* 根据map中参数,修改传递过来对应实体属性列的值
* update时前端传递对应实体属性的map,在转换的时候会根据map中的键替换传入t实体的属性
* 可达到只更新实体中对应map键属性的效果
*/
public static <T> T getPartialUpdateEntity(T t, Map<String, Object> map) {
if (map != null) {
Field[] fields = t.getClass().getDeclaredFields();
for (Field field : fields) {
String name = field.getName();
if (map.keySet().contains(name)) {
ReflectionUtils.makeAccessible(field);
try {
field.set(t, map.get(name));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
return t;
}
}
06-30
660
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)