1. 程式人生 > 其它 >java實體類map之間互相轉換

java實體類map之間互相轉換

技術標籤:java

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

public class EntityUtils {
	/**
	 * 
	 * @description: 實體類轉Map
	 * @param object
	 * @return
	 */
	public static Map<String, Object> entityToMap(Object object) {
		Map<String, Object> map = new HashMap
<>(); for (Field field : object.getClass().getDeclaredFields()) { try { boolean flag = field.isAccessible(); field.setAccessible(true); Object o = field.get(object); map.put(field.getName(), o); field.setAccessible(flag); } catch (Exception e) { e.printStackTrace
(); } } return map; } /** * * @description: Map轉實體類 * @param <T> * @param map 需要初始化的資料,key欄位必須與實體類的成員名字一樣,否則賦值為空 * @param entity 需要轉化成的實體類 * @return */ public static <T> T mapToEntity(Map<String, Object> map, Class<T> entity) { T t = null; try {
t = entity.newInstance(); for (Field field : entity.getDeclaredFields()) { if (map.containsKey(field.getName())) { boolean flag = field.isAccessible(); field.setAccessible(true); Object object = map.get(field.getName()); if (object != null && field.getType().isAssignableFrom(object.getClass())) { field.set(t, object); } field.setAccessible(flag); } } return t; } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return t; } public <T> T convertMapToBean(Class<T> clazz, Map<String,Object> map) { T obj = null; try { BeanInfo beanInfo = Introspector.getBeanInfo(clazz); obj = clazz.newInstance(); // 建立 JavaBean 物件 // 給 JavaBean 物件的屬性賦值 PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (int i = 0; i < propertyDescriptors.length; i++) { PropertyDescriptor descriptor = propertyDescriptors[i]; String propertyName = descriptor.getName(); if (map.containsKey(propertyName)) { // 下面一句可以 try 起來,這樣當一個屬性賦值失敗的時候就不會影響其他屬性賦值。 Object value = map.get(propertyName); if ("".equals(value)) { value = null; } Object[] args = new Object[1]; args[0] = value; descriptor.getWriteMethod().invoke(obj, args); } } } catch (IllegalAccessException e) { logger.error("convertMapToBean 例項化JavaBean失敗 Error{}" ,e); } catch (IntrospectionException e) { logger.error("convertMapToBean 分析類屬性失敗 Error{}" ,e); } catch (IllegalArgumentException e) { logger.error("convertMapToBean 對映錯誤 Error{}" ,e); } catch (InstantiationException e) { logger.error("convertMapToBean 例項化 JavaBean 失敗 Error{}" ,e); }catch (InvocationTargetException e){ logger.error("convertMapToBean欄位對映失敗 Error{}" ,e); }catch (Exception e){ logger.error("convertMapToBean Error{}" ,e); } return (T) obj; } }