1 package czc.superzig.modular.utils; 2 3 import java.lang.reflect.Field; 4 import java.util.HashMap; 5 import java.util.Map; 6 import java.util.regex.Matcher; 7 import java.util.regex.Pattern; 8 9 /** 对象转Map工具类 10 * <b> 11 * </b><br><br><i>Description</i> : 12 * <br><br>Date: 2019/6/18 ${time} <br>Author : dxl 13 */ 14 public class ObjToMap { 15 private static Pattern linePattern = Pattern.compile("_(\w)"); 16 private static Pattern humpPattern = Pattern.compile("[A-Z]"); 17 18 /** 19 * <b>对象转map 20 * @date 2019年7月1日 下午2:53:33 <br><i>author</i> : dxl 21 */ 22 public static Map<String, Object> modelToMap(Object obj) { 23 24 Map<String, Object> map = new HashMap<String, Object>(); 25 // 获取f对象对应类中的所有属性域 26 Field[] fields = obj.getClass().getDeclaredFields(); 27 for (int i = 0, len = fields.length; i < len; i++) { 28 String varName = fields[i].getName(); 29 if("serialVersionUID".equals(varName)){ 30 continue; 31 } 32 //将key置为小写,默认为对象的属性 33 varName = humpToLine(varName).toString(); 34 try { 35 // 获取原来的访问控制权限 36 boolean accessFlag = fields[i].isAccessible(); 37 // 修改访问控制权限 38 fields[i].setAccessible(true); 39 // 获取在对象f中属性fields[i]对应的对象中的变量 40 Object o = fields[i].get(obj); 41 if (o != null){ 42 map.put(varName, o);} 43 // System.out.println("传入的对象中包含一个如下的变量:" + varName + " = " + o); 44 // 恢复访问控制权限 45 fields[i].setAccessible(accessFlag); 46 } catch (IllegalArgumentException ex) { 47 ex.printStackTrace(); 48 } catch (IllegalAccessException ex) { 49 ex.printStackTrace(); 50 } 51 } 52 return map; 53 } 54 /** 下划线转驼峰 */ 55 public static String lineToHump(String str) { 56 str = str.toLowerCase(); 57 Matcher matcher = linePattern.matcher(str); 58 StringBuffer sb = new StringBuffer(); 59 while (matcher.find()) { 60 matcher.appendReplacement(sb, matcher.group(1).toUpperCase()); 61 } 62 matcher.appendTail(sb); 63 return sb.toString(); 64 } 65 /** 驼峰转下划线,效率比上面高 */ 66 public static String humpToLine(String str) { 67 Matcher matcher = humpPattern.matcher(str); 68 StringBuffer sb = new StringBuffer(); 69 while (matcher.find()) { 70 matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase()); 71 } 72 matcher.appendTail(sb); 73 return sb.toString(); 74 } 75 }