(1)Map转化为实体类
/*** * convert map to object ,see setObjectValue(obj, map) * @param map : key是对象的成员变量,其value就是成员变量的值 * @param clazz * @return * @throws InstantiationException * @throws IllegalAccessException * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalArgumentException */ public static Object convertMap2Obj(Map<String, Object> map,Class clazz) throws InstantiationException, IllegalAccessException, SecurityException, NoSuchFieldException, IllegalArgumentException{ if(ValueWidget.isNullOrEmpty(map)){ return null; } Object obj=clazz.newInstance(); setObjectValue(obj, map); /*for(Iterator it=map.entrySet().iterator();it.hasNext();){ Map.Entry<String, Object> entry=(Map.Entry<String, Object>)it.next(); String key=entry.getKey(); Object val=entry.getValue(); }*/ return obj; }
/*** * 利用反射设置对象的属性值. 注意:属性可以没有setter 方法. * * @param obj * @param params * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalArgumentException * @throws IllegalAccessException */ public static void setObjectValue(Object obj, Map<String, Object> params) throws SecurityException, IllegalArgumentException, IllegalAccessException, NoSuchFieldException { if(ValueWidget.isNullOrEmpty(obj)){ return; } if (ValueWidget.isNullOrEmpty(params)) { return; } Class<?> clazz = obj.getClass(); for (Iterator it = params.entrySet().iterator(); it.hasNext();) { Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it .next(); String key = entry.getKey(); Object propertyValue = entry.getValue(); if (ValueWidget.isNullOrEmpty(propertyValue)) { continue; } Field name = getSpecifiedField(clazz, key); if (name != null) { name.setAccessible(true); name.set(obj, propertyValue); } } }
(2)把实体类转化为Map
/*** * convert entity to Map * @param obj * @param excludeProperties * @param excludeZero : 是否过滤zero * @return * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalArgumentException * @throws IllegalAccessException */ public static Map convertObj2Map(Object obj, String[] excludeProperties, boolean excludeZero) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { Map map = new HashMap(); List<Field> fieldsList = ReflectHWUtils.getAllFieldList(obj.getClass()); for (int i = 0; i < fieldsList.size(); i++) { Field f = fieldsList.get(i); if (SystemHWUtil.isContains(excludeProperties, f.getName())) { continue; } Object propertyValue = ReflectHWUtils.getObjectValue(obj, f); if (excludeZero) { if (propertyValue instanceof Integer) { int ii = (Integer) propertyValue; if (ii == 0) { continue; } } else if (propertyValue instanceof Long) { int ii = ((Long) propertyValue).intValue(); if (ii == 0) { continue; } } } if (!ValueWidget.isNullOrEmpty(propertyValue)) { map.put(f.getName(), propertyValue); } } return map; }
调用:
Map condition = null; try { condition = ReflectHWUtils.convertObj2Map(roleLevel, columns, true); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); }
jar包见附件 中的/Users/whuanghkl/work/project/io0007/src/main/java/com/common/util/ReflectHWUtils.java