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

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

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;
	}