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 }