Java实现Bean与Map的相互转换

直接上代码

/**
     * 对象转Map
     *
     * @param o
     * @return java.util.Map
     * @auther 
     * @date 2020/5/28 11:01
     */
    public static Map BeanToMap(Object o) {
        Map map = new HashMap();
        //获取对象的所有属性和自定义方法
        Class<?> aClass = o.getClass();
        Field[] declaredFields = aClass.getDeclaredFields();
        Method[] declaredMethods = aClass.getDeclaredMethods();
        Object value = null;
        //循环属性
        for (Field field :
                declaredFields) {
            String key = field.getName();
            String method = "get" + key.substring(0, 1).toUpperCase() + key.substring(1);
            for (Method m :
                    declaredMethods) {
                if (!method.equals(m.getName())) {
                    continue;
                }
                //获取属性值
                try {
                    value = m.invoke(o);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
            }
            map.put(key, value);
        }
        return map;
    }

    /**
     * Map转Bean
     *
     * @param map
     * @param clazz
     * @return T
     * @auther 
     * @date 2020/5/28 11:18
     */
    public static <T> T MapToBean(Map map, Class<T> clazz) {
        T obj = null;
        try {
            obj = clazz.newInstance();
            Method[] methods = clazz.getDeclaredMethods();
            Set keySet = map.keySet();
            for (Object key :
                    keySet) {
                Object value = map.get(key);
                String keyName = key.toString();
                String methodName = "set" + keyName.substring(0, 1).toUpperCase() + keyName.substring(1);
                for (Method m :
                        methods) {
                    if (methodName.equals(m.getName())) {
                        //获取参数类型
                        Class<?>[] parameterTypes = m.getParameterTypes();
                        String name = parameterTypes[0].getSimpleName();
                        setValue(m,obj,value,name);
                        break;
                    }
                }
            }
        } catch (Exception e) {
            obj = null;
        }
        return clazz.cast(obj);
    }

    /**
     * 根据类属性转成相应的类型
     * @auther 
     * @date 2020/5/28 14:21
     * @param method
     * @param obj
     * @param value
     * @param type
     * @return void
    */
    public static void setValue(Method method,Object obj,Object value,String type) throws InvocationTargetException, IllegalAccessException, ParseException {
        if ("String".equals(type)){
            method.invoke(obj,value.toString());
        }else if ("char".equals(type)||"Character".equals(type)){
            method.invoke(obj,new Character(value.toString().toCharArray()[0]));
        }else if ("int".equals(type)||"Integer".equals(type)){
            method.invoke(obj,new Integer(value+""));
        }else if ("double".equals(type) || "Double".equals(type)) {
            method.invoke(obj,
                    new Double("" + value));
        } else if ("float".equals(type) || "Float".equals(type)) {
            method.invoke(obj,
                    new Float("" + value));
        } else if ("long".equals(type) || type.equals("Long")) {
            method.invoke(obj,
                    new Long("" + value));
        } else if ("boolean".equals(type) || "Boolean".equals(type)) {
            method.invoke(obj,
                    Boolean.valueOf("" + value));
        } else if ("BigDecimal".equals(type)) {
            method.invoke(obj, new BigDecimal(""
                    + value));
        } else if ("Date".equals(type)) {
            Date date = null;
            if ("java.util.Date".equals(value.getClass().getName())) {
                date = (Date) value;
            } else {
                String format = (value.toString().indexOf(":")) > 0 ? "yyyy-MM-dd hh:mm:ss"
                        : "yyyy-MM-dd";
                SimpleDateFormat sf = new SimpleDateFormat();
                sf.applyPattern(format);
                date = sf.parse(value.toString());
            }
            if (date != null) {
                method.invoke(obj, new Object[]{date});
            }
        } else if ("byte[]".equals(type)) {
            method.invoke(obj,
                    new Object[]{(value + "").getBytes()});
        } else {
            method.invoke(obj, value);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值