1 import java.beans.BeanInfo; 2 import java.beans.IntrospectionException; 3 import java.beans.Introspector; 4 import java.beans.PropertyDescriptor; 5 import java.lang.reflect.InvocationTargetException; 6 import java.lang.reflect.Method; 7 import java.util.ArrayList; 8 import java.util.Collection; 9 import java.util.HashMap; 10 import java.util.List; 11 import java.util.Map; 12 13 /** 14 * 用于对javabean和map之间的相互装换的工具类 15 */ 16 public class BeanMapConvertUtils { 17 18 /** 19 * 将Map转为javaBean 20 */ 21 public static <T> T mapToObject(Map<String, Object> map, Class<T> beanClass) { 22 if (map == null) 23 return null; 24 T obj = null; 25 BeanInfo beanInfo = null; 26 try { 27 obj = beanClass.newInstance(); 28 beanInfo = Introspector.getBeanInfo(obj.getClass()); 29 } catch (IntrospectionException | InstantiationException | IllegalAccessException e) { 30 e.printStackTrace(); 31 return null; // 如果在创建实例和获取beaninfo出现异常则直接返回null 32 } 33 PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); 34 for (PropertyDescriptor property : propertyDescriptors) { 35 Method setter = property.getWriteMethod(); 36 if (setter != null) { 37 String key = property.getName(); 38 try { 39 setter.invoke(obj, map.get(key)); 40 } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { 41 } 42 } 43 } 44 return obj; 45 } 46 47 /** 48 * @Description: 将Map转为javaBean 49 * @param map 要转换的map对象 50 * @param beanClass 需要转成的javabean的class 51 * @param requiredPropertys 需要转换后包含的属性名集合 52 */ 53 public static <T> T mapToObject(Map<String, Object> map, Class<T> beanClass, Collection<String> requiredPropertys) { 54 if (map == null) 55 return null; 56 T obj = null; 57 BeanInfo beanInfo = null; 58 try { 59 obj = beanClass.newInstance(); 60 beanInfo = Introspector.getBeanInfo(obj.getClass()); 61 } catch (IntrospectionException | InstantiationException | IllegalAccessException e) { 62 e.printStackTrace(); 63 return null; // 如果在创建实例和获取beaninfo出现异常则直接返回null 64 } 65 PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); 66 for (PropertyDescriptor property : propertyDescriptors) { 67 Method setter = property.getWriteMethod(); 68 if (setter != null) { 69 String key = property.getName(); 70 if (requiredPropertys != null && !requiredPropertys.contains(key)) {// 如果不包含需要的属性则跳过 71 continue; 72 } 73 try { 74 setter.invoke(obj, map.get(key)); 75 } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { 76 } 77 } 78 } 79 return obj; 80 } 81 82 /** 83 * 将javabean集合转为map集合 84 * @param objList avabean集合 85 * @param requiredPropertys 需要转换后包含的属性名集合 86 */ 87 public static List<Map<String, Object>> objectsToMaps(Collection<?> objList, Collection<String> requiredPropertys) { 88 List<Map<String, Object>> arrayList = new ArrayList<Map<String, Object>>(); 89 if (objList != null) { 90 for (Object obj : objList) { 91 Map<String, Object> objectToMap = objectToMap(obj, requiredPropertys); 92 if (objectToMap != null) { 93 arrayList.add(objectToMap); 94 } 95 } 96 } 97 return arrayList; 98 } 99 100 /** 101 * 将javaBean转为Map 102 */ 103 public static Map<String, Object> objectToMap(Object obj) { 104 if (obj == null) 105 return null; 106 Map<String, Object> map = new HashMap<String, Object>(); 107 try { 108 BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); 109 PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); 110 for (PropertyDescriptor property : propertyDescriptors) { 111 String key = property.getName(); 112 if (key.compareToIgnoreCase("class") == 0) { 113 continue; 114 } 115 Method getter = property.getReadMethod(); 116 Object value = getter != null ? getter.invoke(obj) : null; 117 map.put(key, value); 118 } 119 } catch (Exception e) { 120 map = null; 121 e.printStackTrace(); 122 } 123 return map; 124 } 125 126 /** 127 * 将Map转为javaBean 128 * @param obj 要转换的javabean对象 129 * @param requiredPropertys 需要转换后包含的属性名集合 130 */ 131 public static Map<String, Object> objectToMap(Object obj, Collection<String> requiredPropertys) { 132 if (obj == null) 133 return null; 134 Map<String, Object> map = new HashMap<String, Object>(); 135 try { 136 BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); 137 PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); 138 for (PropertyDescriptor property : propertyDescriptors) { 139 String key = property.getName(); 140 if (key.compareToIgnoreCase("class") == 0) { 141 continue; 142 } 143 if (requiredPropertys != null && !requiredPropertys.contains(key)) {// 如果不包含需要的属性则跳过 144 continue; 145 } 146 Method getter = property.getReadMethod(); 147 Object value = getter != null ? getter.invoke(obj) : null; 148 map.put(key, value); 149 } 150 } catch (Exception e) { 151 map = null; 152 e.printStackTrace(); 153 } 154 return map; 155 } 156 }