Java 实现 Map 和 Object 互相转换的几种方法

来源:互联网 发布:win10安装软件失败 编辑:程序博客网 时间:2024/06/06 08:35

Java 实现 Map 和 Object 互相转换的几种方法

第一种方法是自己加的,后面几种是摘抄的 :)

参考链接:https://stackoverflow.com/questions/6796187/java-introspection-object-to-map

/** * 使用 com.fasterxml.jackson.databind.ObjectMapper 进行转换 */class A {    public static Object mapToObject (Map<String, Object> map, Class<?> beanClass) throws Exception {        if (map == null) {            return null;        }        ObjectMapper objectMapper = new ObjectMapper();        Object obj = objectMapper.convertValue(map, beanClass);          return obj;    }    public static Map<?, ?> objectToMap (Object obj) {        if (obj == null) {            return null;        }        ObjectMapper objectMapper = new ObjectMapper();        Map<?, ?> mappedObject = objectMapper.convertValue(obj, Map.class);        return mappedObject;    }}/**  * 使用 org.apache.commons.beanutils 进行转换  */ class B {      public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {            if (map == null) {            return null;        }        Object obj = beanClass.newInstance();          org.apache.commons.beanutils.BeanUtils.populate(obj, map);          return obj;      }        public static Map<?, ?> objectToMap(Object obj) {          if (obj == null) {            return null;        }        return new org.apache.commons.beanutils.BeanMap(obj);      }    }  /**  * 使用 Introspector 进行转换  */ class C {      public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {            if (map == null) {            return null;        }        Object obj = beanClass.newInstance();          BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();            for (PropertyDescriptor property : propertyDescriptors) {              Method setter = property.getWriteMethod();                if (setter != null) {                  setter.invoke(obj, map.get(property.getName()));               }          }          return obj;      }        public static Map<String, Object> objectToMap(Object obj) throws Exception {            if (obj == null) {            return null;        }            Map<String, Object> map = new HashMap<String, Object>();           BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();            for (PropertyDescriptor property : propertyDescriptors) {                String key = property.getName();                if (key.compareToIgnoreCase("class") == 0) {                   continue;              }              Method getter = property.getReadMethod();              Object value = getter!=null ? getter.invoke(obj) : null;            map.put(key, value);          }            return map;      }    }  /**  * 使用 reflect 进行转换  */ class D {      public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {            if (map == null) {            return null;        }        Object obj = beanClass.newInstance();          Field[] fields = obj.getClass().getDeclaredFields();           for (Field field : fields) {                int mod = field.getModifiers();                if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {                    continue;                }                field.setAccessible(true);                field.set(obj, map.get(field.getName()));           }           return obj;        }        public static Map<String, Object> objectToMap(Object obj) throws Exception {            if (obj == null) {                return null;            }           Map<String, Object> map = new HashMap<String, Object>();            Field[] declaredFields = obj.getClass().getDeclaredFields();            for (Field field : declaredFields) {                field.setAccessible(true);              map.put(field.getName(), field.get(obj));          }            return map;      }   }
原创粉丝点击