使用Java反射機制將Bean物件轉換成Map(駝峰命名方式 — 下劃線命名方式)
阿新 • • 發佈:2019-01-10
1、駝峰與下劃線方式名稱互相轉換工具類
public class CamelUnderlineUtil { private static final char UNDERLINE ='_'; public static String camelToUnderline(String param) { if (StringUtil.isEmpty(param)) { return ""; } StringBuilder sb = new StringBuilder(); int len = param.length(); for (int i = 0; i < len; i++) { char c = param.charAt(i); if (Character.isUpperCase(c)) { sb.append(UNDERLINE); sb.append(Character.toLowerCase(c)); } else { sb.append(c); } } return sb.toString(); } public static String underlineToCamel(String param){ if (StringUtil.isEmpty(param)) { return ""; } StringBuilder sb = new StringBuilder(); int len = param.length(); for (int i = 0; i < len; i++) { char c = param.charAt(i); if (c==UNDERLINE) { if(++i<len){ sb.append(Character.toUpperCase(param.charAt(i))); } } else { sb.append(c); } } return sb.toString(); } }
2、Bean物件轉Map方法
private Map<String, String> convertObjectToMap(Object obj, Class clazz) throws Exception { Map<String, String> dstMap = new HashMap<String, String>(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { if ("serialVersionUID".equals(field.getName())) { continue; } String dstName = CamelUnderlineUtil.camelToUnderline(field.getName()); PropertyDescriptor pd; pd = new PropertyDescriptor(field.getName(), clazz); Method method = pd.getReadMethod(); Object dstObject = method.invoke(obj); if (dstObject instanceof Date) { dstObject = convertToTimeStamp16((Date) dstObject); } if (dstObject instanceof ArrayList) { dstObject = ""; } dstMap.put(dstName, StringUtil.isEmpty(dstObject) ? "" : dstObject.toString()); } return dstMap; }