map与对象相互转换

map与对象相互转换
工具类,不使用第三方依赖,纯反射实现
package com.qitai.maputil;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ObjectToMapUtil {
    /**
     * object对象转map
     * @param o
     * @return
     * @throws Exception
     */
    public static Map<String,Object> objectToMap(Object o) throws Exception {
        Map<String,Object> objectMap = new HashMap<>();
        Class oClass = o.getClass();
        Field[] fields = oClass.getDeclaredFields();
        List<String> fieldNames = new ArrayList<>();
        for (Field field:fields){
            String fieldName = field.getName();
            fieldNames.add(fieldName);
            PropertyDescriptor descriptor = new PropertyDescriptor(field.getName(), oClass);
            Method method = descriptor.getReadMethod();
            if ("class java.lang.String".equals(field.getType().toString())||
                    "int".equals(field.getType().toString())||
                    "class java.lang.Integer".equals(field.getType().toString())||
                    "class java.util.Date".equals(field.getType().toString())||
                    "class java.lang.Double".equals(field.getType().toString())||
                    "class java.lang.Boolean".equals(field.getType().toString())||
                    "class java.lang.Short".equals(field.getType().toString())) {
                objectMap.put(fieldName,method.invoke(o));
            }else {
                objectMap.put(fieldName,objectToMap(method.invoke(o)));
            }
        }
        return objectMap;
    }
/**
 * map转对象
 * @param tClass
 * @param map
 * @param <T>
 * @return
 * @throws Exception
 */
	public static <T> T mapToObject(Class<T> tClass,Map<String,Object> map) throws Exception {
        T t = tClass.newInstance();
        Field[] fields = tClass.getDeclaredFields();
        List<String> fieldNames = new ArrayList<>();
        for (Field field:fields){
            String fieldName = field.getName();
            fieldNames.add(fieldName);
        }
        for (String key:map.keySet()){
            if (fieldNames.contains(key)){
                for (Field field:fields){
                    String fieldName = field.getName();
                    fieldNames.add(fieldName);
                    if (fieldName.equals(key)){
                        PropertyDescriptor descriptor = new PropertyDescriptor(field.getName(), tClass);
                        Method method = descriptor.getWriteMethod();
                        if (map.get(key) instanceof Map){
                            Class c1 = Class.forName(field.getType().toString().replace("class ",""));
                            method.invoke(t,mapToObject(c1,(Map<String, Object>) map.get(key)));
                        } else {
                            method.invoke(t,map.get(key));
                        }
                    }
                }
            }
        }
        return t;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值