业务背景:当多次请求一个方法时,需要将对象转化为map,不需要每次业务代码进行转换,可以通过反射自动将属性和属性值 转换成map的key ->value形式,这样轻侵入业务代码,省去了很大的工作量。
通过反射写一个转化工具类,但是考虑到对象存在继承父类属性的因素,所以要在反射中考虑通过反射获取父类对象实例,然后将属性key和属性值value,put到map散列表中。
代码实现:
import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map;
public class ConvertUtil { public static Map<String, Object> objToMap(Object obj) { if (obj == null) { return null; } Map<String, Object> map = new HashMap<String, Object>(GlobalConstants.HASH_MAP_INIT_CAPACITY); try { Class child= obj.getClass(); Class superClass=child.getSuperclass(); Field[] superFields = superClass.getDeclaredFields(); Field[] declaredFields = child.getDeclaredFields(); for (Field field : declaredFields) { field.setAccessible(true); map.put(field.getName(), field.get(obj)); } for (Field field : superFields) { field.setAccessible(true); map.put(field.getName(), field.get(obj)); } } catch (Exception e) { log.error("object 转换 map发生异常:{}",e.toString()); e.printStackTrace(); } return map; } }