1. 程式人生 > >對象和map互相轉換工具類

對象和map互相轉換工具類

str 參數 swa tty ets map lan lis lar

package com.panchan.m2.utils;


import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;


/** * Created by Administrator on 2017/3/6. */ public class ObjectMapUtils { /*** * 將對象轉換為map對象 * @param thisObj 對象 * @return */ public static Map<String,Object> objectToMap(Object thisObj) { Map<String,Object> map = new HashMap<String,Object>(); @SuppressWarnings(
"rawtypes") Class c; try { c = Class.forName(thisObj.getClass().getName()); //獲取所有的方法 Method[] m = c.getMethods(); for (int i = 0; i < m.length; i++) { //獲取方法名 String method = m[i].getName();
//獲取get開始的方法名 if (method.startsWith("get")&&!method.contains("getClass")) { try{ //獲取對應對應get方法的value值 Object value = m[i].invoke(thisObj); if (value != null) { //截取get方法除get意外的字符 如getUserName-->UserName String key=method.substring(3); //將屬性的第一個值轉為小寫 key=key.substring(0,1).toLowerCase()+key.substring(1); //將屬性key,value放入對象 if(value.getClass().isArray()){ String values = ""; for(Object o:(Object[])value){ values += o.toString() +"|"; } map.put(key, values); } else { map.put(key, value); } } }catch (Exception e) { e.printStackTrace(); // TODO: handle exception System.out.println("error:"+method); } } } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return map; } /** * 將Map對象通過反射機制轉換成Bean對象 * * @param map 存放數據的map對象 * @param clazz 待轉換的class * @return 轉換後的Bean對象 * @throws Exception 異常 */ public static Object mapToObject(Map<String, Object> map, Class<?> clazz) throws Exception { Object obj = clazz.newInstance(); if(map != null && map.size() > 0) { for(Map.Entry<String, Object> entry : map.entrySet()) { String propertyName = entry.getKey(); //屬性名 Object value = entry.getValue(); String setMethodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1); //獲取屬性對應的對象字段 Field field = getClassField(clazz, propertyName); if(field==null) continue; //獲取字段類型 Class<?> fieldTypeClass = field.getType(); //根據字段類型進行值的轉換 value = convertValType(value, fieldTypeClass); try{ //調用對象對應的set方法 clazz.getMethod(setMethodName, field.getType()).invoke(obj, value); }catch(NoSuchMethodException e){ e.printStackTrace(); } } } return obj; } /** * 獲取指定字段名稱查找在class中的對應的Field對象(包括查找父類) * * @param clazz 指定的class * @param fieldName 字段名稱 * @return Field對象 */ private static Field getClassField(Class<?> clazz, String fieldName) { if( Object.class.getName().equals(clazz.getName())) { return null; } Field []declaredFields = clazz.getDeclaredFields(); for (Field field : declaredFields) { if (field.getName().equals(fieldName)) { return field; } } Class<?> superClass = clazz.getSuperclass(); if(superClass != null) {// 簡單的遞歸一下 return getClassField(superClass, fieldName); } return null; } /** * 將Object類型的值,轉換成bean對象屬性裏對應的類型值 * * @param value Object對象值 * @param fieldTypeClass 屬性的類型 * @return 轉換後的值 */ private static Object convertValType(Object value, Class<?> fieldTypeClass) { Object retVal = null; if(Long.class.getName().equals(fieldTypeClass.getName()) || long.class.getName().equals(fieldTypeClass.getName())) { retVal = Long.parseLong(value.toString()); } else if(Integer.class.getName().equals(fieldTypeClass.getName()) || int.class.getName().equals(fieldTypeClass.getName())) { retVal = Integer.parseInt(value.toString()); } else if(Float.class.getName().equals(fieldTypeClass.getName()) || float.class.getName().equals(fieldTypeClass.getName())) { retVal = Float.parseFloat(value.toString()); } else if(Double.class.getName().equals(fieldTypeClass.getName()) || double.class.getName().equals(fieldTypeClass.getName())) { retVal = Double.parseDouble(value.toString()); } else { retVal = value; } return retVal; } // public static void main(String... args) throws Exception{ // BankVo bv = new BankVo(); // bv.setBankCard("11111111111111"); // bv.setBankImgUrl("222222222222"); // String[] aa = new String[]{"1","2"}; // bv.setAa(aa); // //對象轉map // Map<String, Object> map = objectToMap(bv); // System.out.println(getPlanText(map)); // for (Map.Entry entry : map.entrySet()) { // System.out.println(entry); // System.out.println(entry.getKey() +":" + entry.getValue()); // } //map轉對象 // BankVo newUser = (BankVo) mapToObject(map,BankVo.class); // System.out.println(newUser.getBankCard()); // System.out.println(newUser.getBankImgUrl()); // System.out.println(newUser.getAa()); // // } /** * sign 參數排序去空 * @return 生成sign 明文串 */ public static String getPlanText(Map<String, Object> map) { // Map<String, String> map = new TreeMap<String, String>(); //這裏將map.entrySet()轉換成list List<Map.Entry<String,Object>> list = new ArrayList<Map.Entry<String,Object>>(map.entrySet()); //然後通過比較器來實現排序 Collections.sort(list,new Comparator<Map.Entry<String,Object>>() { //升序排序 public int compare(Entry<String, Object> o1, Entry<String, Object> o2) { return o1.getKey().compareTo(o2.getKey()); } }); StringBuffer s = new StringBuffer(); for(Map.Entry<String,Object> m:list){ s.append(m.getKey()).append("=").append(m.getValue()).append("&"); } if(s.length()>1) s.setLength(s.length()-1); String planText = s.toString(); System.out.println("request planText ["+planText+"]"); return planText; } }

對象和map互相轉換工具類