美文网首页
Java实现Map<=>JavaBean之间的相互转换

Java实现Map<=>JavaBean之间的相互转换

作者: SILENCE_SPEAKS | 来源:发表于2021-06-16 18:58 被阅读0次

相关工具类代码

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

/**
 * @description: Map《=》javaBean 转换工具类
 * @author: zyb
 * @date: 2021/6/16 18:24
 */
public class BeanMapUtils {

    /**
     * 把JavaBean转化为map
     * @param bean JavaBean
     * @return Map
     * @throws Exception 异常
     */
    public static Map<String, Object> bean2map(Object bean) throws Exception {
        Map<String, Object> map = new HashMap<>();
        //获取JavaBean的描述器
        BeanInfo b = Introspector.getBeanInfo(bean.getClass(), Object.class);
        //获取属性描述器
        PropertyDescriptor[] pds = b.getPropertyDescriptors();
        //对属性迭代
        for (PropertyDescriptor pd : pds) {
            //属性名称
            String propertyName = pd.getName();
            //属性值,用getter方法获取
            Method m = pd.getReadMethod();
            Object properValue = m.invoke(bean);//用对象执行getter方法获得属性值

            //把属性名-属性值 存到Map中
            map.put(propertyName, properValue);
        }
        return map;
    }

    /**
     * 把Map转化为JavaBean
     * @param map Map
     * @param clz 实体类
     * @param <T> 泛型
     * @return JavaBean
     * @throws Exception 异常
     */
    public static <T> T map2bean(Map<String, Object> map, Class<T> clz) throws Exception {
        //创建一个需要转换为的类型的对象
        T obj = clz.newInstance();
        //从Map中获取和属性名称一样的值,把值设置给对象(setter方法)

        //得到属性的描述器
        BeanInfo b = Introspector.getBeanInfo(clz, Object.class);
        PropertyDescriptor[] pds = b.getPropertyDescriptors();
        for (PropertyDescriptor pd : pds) {
            //得到属性的setter方法
            Method setter = pd.getWriteMethod();
            //得到key名字和属性名字相同的value设置给属性
            setter.invoke(obj, map.get(pd.getName()));
        }
        return obj;
    }
}

相关文章

网友评论

      本文标题:Java实现Map<=>JavaBean之间的相互转换

      本文链接:https://www.haomeiwen.com/subject/hnefyltx.html