import lombok.extern.log4j.Log4j2; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @author hhh * @date 2019/6/17 11:21 * @Despriction */ @Log4j2 public class MapObjUtil { /** * getBean 將map轉爲Object,支持 Date/Boolean * * @param param * @param clazz * @param <T> * @return */ @SuppressWarnings("unchecked") public static <T> T getBean(Map<String, Object> param, Class clazz)throws Exception { Object value = null; Class[] paramTypes = new Class[1]; Object obj = null; //建立對象實例 obj = clazz.newInstance(); Field[] f = clazz.getDeclaredFields(); List<Field[]> flist = new ArrayList<Field[]>(); flist.add(f); Class superClazz = clazz.getSuperclass(); while (superClazz != null) { f = superClazz.getFields(); flist.add(f); superClazz = superClazz.getSuperclass(); } for (Field[] fields : flist) { for (Field field : fields) { String fieldName = field.getName(); value = param.get(fieldName); if (value != null) { paramTypes[0] = field.getType(); Method method = null; //調用相應對象的set方法 StringBuffer methodName = new StringBuffer("set"); methodName.append(fieldName.substring(0, 1).toUpperCase()); methodName.append(fieldName.substring(1, fieldName.length())); log.info("本次複製屬性名稱爲:{}", paramTypes[0].getName()); method = clazz.getMethod(methodName.toString(), paramTypes); method.invoke(obj, ConvertUtil.getValue(value.toString(), fieldName, paramTypes[0])); } } } return (T) obj; } }
package com.jn.ssr.superrescue.util; import org.apache.commons.beanutils.ConvertUtils; import java.util.Date; import java.text.ParseException; import java.text.SimpleDateFormat; /** * @author hhh * @date 2019/6/17 14:25 * @Despriction */ public class ConvertUtil { public static<T> T getValue(String value,String fieldName,Class<T> clazz){ if (value == null) { // 若是獲取參數值爲null,則返回null return null; } else if (!value.equals("")) { // 若是獲取參數值不爲"",則經過convertGt方法進行類型轉換後返回結果 return convertGt(value, clazz); } else if (clazz.getName().equals(String.class.getName())) { // 若是獲取參數值爲"" return convertGt(value, clazz); } else {// 若是獲取參數值爲"",而且clazz不是是String類型,則返回null return null; } } /** * @param <T> * @param value * @param clazz * @return */ @SuppressWarnings("unchecked") public static <T> T convertGt(String value, Class<T> clazz) { if (value == null) { // 若是值爲null,則返回null return null; } else if (value.equals("") && !clazz.getName().equals(String.class.getName())) { // 若是value值爲"",並且要轉爲的類型不是string類型,那麼就統一返回null,也就是空字符串不能轉成任何其餘類型的實體,只能返回null return null; } else if (Date.class.getName().equalsIgnoreCase(clazz.getName())) { // 增長對從String類型到Date return (T) convertSTD(value); } return (T) ConvertUtils.convert(value, clazz); } //日期類型的轉換 private static SimpleDateFormat simpleDateFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static Date convertSTD(String date){ try { return simpleDateFormate.parse(date); } catch (ParseException e) { e.printStackTrace(); } return null; } public static String convertDTS(Date date){ return simpleDateFormate.format(date); } }