【java基本操作】java对象转换成map对象,map对象转换成java对象,不依赖框架,手写代码完成

这篇文章提供了两个方法,分别用于将Java对象转换为Map对象以及将Map对象转换回Java实体类,整个过程不依赖任何框架,通过反射和递归实现。javaBeanToMap函数遍历对象的所有字段并放入Map中,mapToEntity函数则根据Map创建新的实体实例并设置字段值。
摘要由CSDN通过智能技术生成

【java基本操作】java对象转换成map对象,map对象转换成java对象,不依赖框架,手写代码完成


    /**
     * java实体转map
     *
     * @param obj
     * @return
     */
    public static Map<String, Object> javaBeanToMap(Object obj) {
        Map<String, Object> map = new HashMap<>(16);
        if (obj == null) {
            return map;
        }
        parseClassToMap(obj, obj.getClass(), map);
        return map;
    }

    private static void parseClassToMap(Object obj, Class<?> aClass, Map<String, Object> map) {
        Field[] declaredFields = aClass.getDeclaredFields();
        for (Field field : declaredFields) {
            field.setAccessible(true);
            try {
                map.put(field.getName(), field.get(obj));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
                throw new RuntimeException("javaBeanToMap parse error");
            }
        }
        Class<?> superclass = aClass.getSuperclass();
        if (superclass == null) {
            return;
        }
        parseClassToMap(obj, superclass, map);
    }

    /**
     * map转实体
     *
     * @param map
     * @param tClass
     * @param <T>
     * @return
     */
    public static <T> T mapToEntity(Map<String, Object> map, Class<T> tClass) throws Exception {
        T entity = tClass.newInstance();
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            String fieldName = entry.getKey();
            Object fieldValue = entry.getValue();
            Field field = tClass.getDeclaredField(fieldName);
            field.setAccessible(true);
            Class<?> fieldType = field.getType();
            if (fieldValue != null && !"".equals(fieldValue)) {
                Object convertedValue = convertValue(fieldValue, fieldType);
                field.set(entity, convertedValue);
            }
        }
        return entity;
    }

    /**
     * 转换为对应类型
     *
     * @param value
     * @param targetType
     * @return
     */
    private static Object convertValue(Object value, Class<?> targetType) {
        if (targetType == String.class) {
            return value.toString();
        } else if (targetType == Integer.class || targetType == int.class) {
            return Integer.parseInt(value.toString());
        } else if (targetType == Long.class || targetType == long.class) {
            return Long.parseLong(value.toString());
        } else if (targetType == Double.class || targetType == double.class) {
            return Double.parseDouble(value.toString());
        } else if (targetType == Boolean.class || targetType == boolean.class) {
            return Boolean.parseBoolean(value.toString());
        } else if (targetType == Date.class) {
            return DateUtils.dateString2Date(value.toString());
        }
        return value;
    }


    /**
     * 设置指定列为null
     */
    public static void fieldNull(Object obj, String field) {
        Class<?> aClass = obj.getClass();
        try {
            Field declaredField = aClass.getDeclaredField(field);
            declaredField.setAccessible(true);
            declaredField.set(obj, null);
        } catch (NoSuchFieldException | IllegalAccessException e) {
            logger.warn("==> 置空指定列异常,获取属性:field:{} err:{}", field, e.getMessage());
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值