java 反射转换类(把map转为java bean , 把javabean 转成 map)

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;

/**
 * 反射转换类
 *
 * @author zhenggaojie
 */
public class ReflectUtil {

    private static final Logger logger = LoggerFactory.getLogger(ReflectUtil.class);

    /**
     * 把map转为java bean
     *
     * @param map
     * @param clazz
     * @return
     */
    public static <T> T fromMap(Map<String, Object> map, Class<T> clazz) {
        T t = null;
        try {
            t = clazz.newInstance();
            Field[] fields = clazz.getDeclaredFields();
            for (Field field : fields) {
                field.setAccessible(true);
                if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers())
                        || field.isSynthetic()) {
                    // 静态变量、synthetic和父类对象变量性忽略
                    continue;
                }
                // boolean类型
                if (field.getType().getName().equals("boolean")) {
                    field.setBoolean(t, Boolean.valueOf((String) map.get(field.getName())));
                } else if (field.getType().getName().equals("java.lang.Integer")) {
                    if (null != map.get((field.getName()))){
                        field.setInt(t, Integer.parseInt(String.valueOf(map.get(field.getName()))));
                    }
                } else if (field.getType().getName().equals("java.lang.Long")) {
                    if (null != map.get((field.getName()))){
                        field.setLong(t, Long.parseLong(String.valueOf(map.get(field.getName()))));
                    }
                } else { // 其他类型
                    if (null != map.get((field.getName()))) {
                        field.set(t, map.get(field.getName()));
                    }
                }
            }
        } catch (Exception ex) {
            logger.error("", ex);
            throw new RuntimeException("", ex);
        }
        return t;
    }

    /**
     * 把javabean 转成 map
     *
     * @param obj
     * @return
     */
    public static Map<String, Object> toMap(Object obj) {
        try {
            Map<String, Object> map = new HashMap<String, Object>();
            for (Field field : obj.getClass().getDeclaredFields()) {
                handleAccessible(field);
                if (null != field.get(obj)) {
                    map.put(field.getName(), field.get(obj));
                }
            }
            return map;
        } catch (Exception ex) {
            logger.error("", ex);
            throw new RuntimeException("", ex);
        }

    }

    public static <T> Map<String, T> toMap(Object obj, Class<T> t) {
        try {
            Map<String, T> map = new HashMap<>();
            for (Field field : obj.getClass().getDeclaredFields()) {
                handleAccessible(field);
                if (null != field.get(obj)) {
                    map.put(field.getName(), (T) field.get(obj));
                }
            }
            return map;
        } catch (Exception ex) {
            logger.error("", ex);
            throw new RuntimeException("", ex);
        }
    }

    public static Map<String, String> toStringMap(Object obj) {
        try {
            Map<String, String> map = new HashMap<>();
            for (Field field : obj.getClass().getDeclaredFields()) {
                handleAccessible(field);
                if (null != field.get(obj)) {
                    map.put(field.getName(), String.valueOf(field.get(obj)));
                }
            }
            return map;
        } catch (Exception ex) {
            logger.error("", ex);
            throw new RuntimeException("", ex);
        }
    }

    /**
     * 是否需要忽略权限检查
     *
     * @param field
     */
    private static void handleAccessible(Field field) {
        if (!field.isAccessible()) {
            field.setAccessible(true);
        }
    }

}

(Map的value类型为String时,可以转换成Bean对应的类型)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值