1. 程式人生 > 實用技巧 >使用Java反射機制將Bean物件轉換成Map(駝峰命名方式 — 下劃線命名方式)

使用Java反射機制將Bean物件轉換成Map(駝峰命名方式 — 下劃線命名方式)

package com.lynch.erp.core.util;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

/**
 * 使用Java反射機制將Bean物件轉換成Map(駝峰命名方式 —下劃線命名方式)
 * 
 * 
@author admin * */ public class CamelUnderlineUtil { private static final char UNDERLINE ='_'; /** * 駝峰命名轉換成下劃線方式名稱,eg:cfConfigRecord > cf_config_record * * @param param * @return */ public static String camelToUnderline(String param) { if (StringUtils.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(); } /** * 下劃線方式名稱轉換成駝峰命名,eg:cf_config_record > cfConfigRecord * * @param param * @return */ public static String underlineToCamel(String param){ if (StringUtils.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(); } /** * Bean物件轉Map方法<br/><br/> * * eg、{ccr_id=1, operate_type=1, create_time=2020-08-24 13:44:09, remark=測試測試, sql=aaa} * * @param obj * @param clazz * @return * @throws Exception */ public static 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 = DateUtil.dateToString((Date)dstObject); } if (dstObject instanceof ArrayList) { dstObject = ""; } dstMap.put(dstName, dstObject == null ? "" : dstObject.toString()); } return dstMap; } }