工具类---Map转换成指定对象 对象转换成Map (利用反射去做)

直接上代码了把

这是Map转换为对象

/**
 * Map中的数据 ===> 对象中
 * @author Chenaniah Cheng
 * @create 2019-05-12
 */
public class MapToObjectUtil {

    //第二步:在执行之前 我们约定一下,map中的所有k-v都与对象中的字段名称一致 没有对象中不存在的字段
    public Object changeToObject(Map map, Object obj) throws IllegalAccessException {
        //第一步,通过反射放入值
        Class clazz=obj.getClass();

        Field[] fields = clazz.getDeclaredFields();

        //第二步:
        for(Field filed : fields){
            //允许外界访问
            filed.setAccessible(true);
            //1.map中没有对应该字段的值
            //2.Map中的值是Object类型的,会不会遇到存放值不匹配的,报异常的情况
            if(map.get(filed.getName())!=null && filed.getType()!= BigDecimal.class){
                filed.set(obj,map.get(filed.getName()));
            }
            //3.存放BigDecimal的时候报错
            //4.扩展问题,如果遇到还有其他属性不能放入进去,那么继续 && ?
            if(filed.getType()== BigDecimal.class){
                String val =map.get(filed.getName()).toString();
                BigDecimal bigDecimal = new BigDecimal(val);
                filed.set(obj,bigDecimal);
            }

        }
        return obj;
    }

这是对象转换为Map

/**
 * 该工具类是 对象不为空的字段  ===> Map
 * @author Chenaniah Cheng
 * @create 2019-05-12
 */
public class ObjectToMapUtil {

    //该方法就是把对象传进来 转换为Map再返回回去
    public Map changeToMap(Object obj, Map map){
        Class clazz=obj.getClass();
        //获取所有的字段
        Field[] fields = clazz.getDeclaredFields();
        for(Field filed : fields){
            System.out.println("字段名称:"+filed.getName());
            try {
                filed.setAccessible(true);
                Object val=filed.get(obj);
                if(val != null){
                    map.put(String.valueOf(filed.getName()),val);
                }

            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }

        }

        return map;
    }


}

 

 

你可能感兴趣的:(工具类---Map转换成指定对象 对象转换成Map (利用反射去做))