首頁 > 軟體

java實體類轉成map的實現

2022-06-21 14:10:04

java實體類轉成map

1.第一種

 <!-- 設定gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>
       Map<String, Object> map = null;
  String jsonString = JSONUtil.toJsonStr(uploadBaseEntity);
       Gson gson = new Gson();
        map = new HashMap<>();
        map = gson.fromJson(jsonString, map.getClass());

2.第二種

/**
     * 物件轉化為Map
     *
     * @param obj
     * @return
     * @throws Exception
     */
    public static Map<String, String> objectToMap01(Object obj) throws Exception {
        if (obj == null) {
            return null;
        }
        Map<String, String> map = new HashMap<String, String>();
 
        Field[] declaredFields = obj.getClass().getDeclaredFields();
        for (Field field : declaredFields) {
            field.setAccessible(true);
            map.put(field.getName(), (String) field.get(obj));
        }
 
        return map;
    }

java實體類與map集合互轉

廢話不說,直接上程式碼!留著用吧...

package com.ddm.message.test;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Java實體類與Map互轉
 * @author Administrator
 *
 */
public class entityMapTransUtils {
    private static final Logger logger = LoggerFactory.getLogger(entityMapTransUtils.class);
    /**
     * Java實體類轉Map:方法一
     * @param obj
     * @return
     */
    public static Map<String, Object> entityToMap1(Object obj){
        Map<String, Object> map = new HashMap<String, Object>();
        Class<?> clazz = obj.getClass();
        for(Field field : clazz.getDeclaredFields()){
            field.setAccessible(true);
            String fieldName = field.getName();
            Object object = null;
            try {
                object = field.get(obj);
            } catch (IllegalArgumentException | IllegalAccessException e) {
                logger.info(e.getMessage());
            }
            map.put(fieldName, object);
        }
        return map;
    }

    /**
     * Java實體類轉Map:方法二
     * @param obj
     * @return
     */
    public static Map<String, Object> entityToMap2(Object obj){
        Map<String, Object> map = new HashMap<String, Object>();
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (PropertyDescriptor property : propertyDescriptors) {
                String key = property.getName();
                // 過濾class屬性
                if (!key.equals("class")) {
                    // 得到property對應的getter方法
                    Method getter = property.getReadMethod();
                    Object value = getter.invoke(obj);
                    map.put(key, value);
                }
            }
        } catch (Exception e) {
            logger.info(e.getMessage());
        }
        return map;
    }
    
    /**
     * Map轉實體類:要轉換的Map的key跟實體類屬性名相同的資料會轉過去,不相同的欄位會為null
     * @param clazz
     * @param map
     * @return
     */
    public static <T> T mapToEntity1(Class<T> clazz,Map<String, Object> map){
        T obj = null;
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
            obj = clazz.newInstance(); // 建立 JavaBean 物件
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            // 給 JavaBean 物件的屬性賦值
            for (int i = 0; i < propertyDescriptors.length; i++) {
                PropertyDescriptor descriptor = propertyDescriptors[i];
                String propertyName = descriptor.getName();
                if (map.containsKey(propertyName)) {
                    Object value = map.get(propertyName);
                    Object[] args = new Object[1];
                    args[0] = value;
                    try {
                        descriptor.getWriteMethod().invoke(obj, args);
                    } catch (InvocationTargetException e) {
                        logger.info(e.getMessage());
                    }
                }
            }
        } catch (IllegalAccessException e) {
            logger.info(e.getMessage());
        } catch (IntrospectionException e) {
            logger.info(e.getMessage());
        } catch (IllegalArgumentException e) {
            logger.info(e.getMessage());
        } catch (InstantiationException e) {
            logger.info(e.getMessage());
        }
        return (T)obj;
    }
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com