最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?map和bean互轉(zhuǎn)常用的方法總結(jié)

 更新時(shí)間:2023年09月22日 10:40:03   作者:我老菜  
這篇文章主要給大家介紹了關(guān)于Java中map和bean互轉(zhuǎn)常用方法的相關(guān)資料,平時(shí)日常Java開(kāi)發(fā),經(jīng)常會(huì)涉及到Java?Bean和Map之間的類(lèi)型轉(zhuǎn)換,需要的朋友可以參考下

一、hutool工具類(lèi)

這個(gè)很常用,還支持將蛇形轉(zhuǎn)成駝,如:apply_time 會(huì)賦值到applyTime上

        LTDemo ltDemo = BeanUtil.mapToBean(map, LTDemo.class, true, CopyOptions.create());
        Map<String, Object> demoMap = BeanUtil.beanToMap(ltDemo);
        System.out.println("輸出map -> bean: " + ltDemo.toString());
        System.out.println("輸出bean -> map : " + demoMap);
        System.out.println(ltDemo.getApplyTime());
        System.out.println(ltDemo.getChildren());
        ltDemo.getChildren().forEach(children -> System.out.println(children.toString()));
        ltDemo.getChildren().forEach(children -> System.out.println(children.getAddress()));

輸出原生map: {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:21:01 CST 2023, age=2}], name=張三, apply_time=Fri Mar 03 17:21:01 CST 2023, age=20}
輸出map -> bean: LTDemo(name=張三, age=20, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[])])
輸出bean -> map : {name=張三, age=20, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[])]}
Fri Mar 03 17:21:01 CST 2023
[LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[])]
LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:01 CST 2023, children=[])
上海市

二、fastjson工具類(lèi)

這個(gè)也很常用,也支持將蛇型轉(zhuǎn)成駝峰,

如:apply_time 會(huì)賦值到applyTime

        LTDemo ltDemo = JSONObject.parseObject(JSONObject.toJSONString(map), LTDemo.class);
        Map demoMap = JSONObject.parseObject(JSONObject.toJSONString(ltDemo), Map.class);
        System.out.println("輸出map -> bean: " + ltDemo.toString());
        System.out.println("輸出bean -> map : " + demoMap);
        System.out.println(ltDemo.getApplyTime());
        System.out.println(ltDemo.getChildren());
        ltDemo.getChildren().forEach(children -> System.out.println(children.toString()));
        ltDemo.getChildren().forEach(children -> System.out.println(children.getAddress()));

輸出原生map: {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:21:59 CST 2023, age=2}], name=張三, apply_time=Fri Mar 03 17:21:59 CST 2023, age=20}
輸出map -> bean: LTDemo(name=張三, age=20, address=上海市, applyTime=Fri Mar 03 17:21:59 CST 2023, children=[LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:59 CST 2023, children=[])])
輸出bean -> map : {address=上海市, children=[{"address":"上海市","children":[],"name":"小張","applyTime":1677835319813,"age":2}], name=張三, applyTime=1677835319813, age=20}
Fri Mar 03 17:21:59 CST 2023
[LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:59 CST 2023, children=[])]
LTDemo(name=小張, age=2, address=上海市, applyTime=Fri Mar 03 17:21:59 CST 2023, children=[])
上海市

三、beanutils_BeanUtils工具類(lèi) 不太好用

嵌套型map,轉(zhuǎn)換會(huì)有問(wèn)題,且不支持蛇型轉(zhuǎn)成駝峰

    //-------------------    beanutils_BeanUtils  -----------------
    //map轉(zhuǎn)java對(duì)象
    public static <T> T beanUtils_mapToObject(Map<String, Object> map, Class<T> clazz) throws Exception {
        if (map == null) {
            return null;
        }
        T bean = clazz.newInstance();
        BeanUtils.populate(bean, map);
        return bean;
    }
        LTDemo ltDemo = beanUtils_mapToObject(map, LTDemo.class);
        System.out.println("輸出map -> bean: " + ltDemo.toString());
        System.out.println(ltDemo.getApplyTime());
        System.out.println(ltDemo.getChildren().get(0).getApplyTime());

輸出map -> bean: LTDemo(name=張三, age=20, address=上海市, applyTime=Fri Mar 03 17:04:38 CST 2023, children=[{address=上海市, name=小張, applyTime=Fri Mar 03 17:04:38 CST 2023, age=2}])
Fri Mar 03 17:04:38 CST 2023
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.demo.map2bean.LTDemo
    at com.example.demo.map2bean.MapToBean.main(MapToBean.java:73)

四、cglib BeanMap工具類(lèi) 不太好用

這個(gè)也很常用,也支持將蛇形轉(zhuǎn)成駝,如:apply_time 會(huì)賦值到applyTime上

import net.sf.cglib.beans.BeanMap;
    // -------------------   cglib BeanMap  -------------------
    //map對(duì)象轉(zhuǎn)java
    public static <T> T BeanMapMapToObject(Map<String, Object> map, Class<T> beanClass) throws Exception {
        T object = beanClass.newInstance();
        BeanMap beanMap = BeanMap.create(object);
        beanMap.putAll(map);
        return object;
    }
    //java對(duì)象轉(zhuǎn)map
    public static Map<String, Object> BeanMapObjectToMap(Object obj) {
        Map<String, Object> map = Maps.newHashMap();
        if (obj != null) {
            BeanMap beanMap = BeanMap.create(obj);
            for (Object key : beanMap.keySet()) {
                map.put(key + "", beanMap.get(key));
            }
        }
        return map;
    }
        LTDemo ltDemo = beanMapMapToObject(map, LTDemo.class);
        Map demoMap = beanMapObjectToMap(ltDemo);
        System.out.println("輸出map -> bean: " + ltDemo.toString());
        System.out.println("輸出bean -> map : " + demoMap);
        System.out.println(ltDemo.getApplyTime());
        System.out.println(ltDemo.getChildren());
        ltDemo.getChildren().forEach(children -> System.out.println(children.toString()));

輸出原生map: {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:12:45 CST 2023, age=2}], name=張三, apply_time=Fri Mar 03 17:12:45 CST 2023, age=20}
輸出map -> bean: LTDemo(name=張三, age=20, address=上海市, applyTime=null, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:12:45 CST 2023, age=2}])
輸出bean -> map : {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:12:45 CST 2023, age=2}], name=張三, applyTime=null, age=20}
null
[{address=上海市, name=小張, apply_time=Fri Mar 03 17:12:45 CST 2023, age=2}]
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.demo.map2bean.LTDemo
    at java.util.ArrayList.forEach(ArrayList.java:1259)
    at com.example.demo.map2bean.MapToBean.main(MapToBean.java:75)

五、reflect 反射來(lái)玩 不太好玩

    //-------------------   reflect     -------------------
    //map轉(zhuǎn)java對(duì)象
    public static Object reflectMapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
        if (map == null) {
            return null;
        }
        Object object = beanClass.newInstance();
        Field[] fields = beanClass.getDeclaredFields();
        for (Field field : fields) {
            int mod = field.getModifiers();
            if (Modifier.isFinal(mod) || Modifier.isStatic(mod)) {
                continue;
            }
            field.setAccessible(true);
            field.set(object, map.get(field.getName()));
        }
        return object;
    }
    //java對(duì)象轉(zhuǎn)map
    public static Map<String, Object> reflectObjectToMap(Object obj) throws Exception {
        if (obj == null) {
            return null;
        }
        Map<String, Object> map = new HashMap<String, Object>();
        Field[] declaredFields = obj.getClass().getDeclaredFields();
        for (Field field : declaredFields) {
            field.setAccessible(true);
            map.put(field.getName(), field.get(obj));
        }
        return map;
    }
        LTDemo ltDemo = reflectMapToObject(map,LTDemo.class);
        Map demoMap = reflectObjectToMap(ltDemo);
        System.out.println("輸出map -> bean: " + ltDemo.toString());
        System.out.println("輸出bean -> map : " + demoMap);
        System.out.println(ltDemo.getApplyTime());
        System.out.println(ltDemo.getChildren());
        ltDemo.getChildren().forEach(children -> System.out.println(children.toString()));

輸出原生map: {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:16:35 CST 2023, age=2}], name=張三, apply_time=Fri Mar 03 17:16:35 CST 2023, age=20}
輸出map -> bean: LTDemo(name=張三, age=20, address=上海市, applyTime=null, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:16:35 CST 2023, age=2}])
輸出bean -> map : {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 17:16:35 CST 2023, age=2}], name=張三, applyTime=null, age=20}
null
[{address=上海市, name=小張, apply_time=Fri Mar 03 17:16:35 CST 2023, age=2}]
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.demo.map2bean.LTDemo
    at java.util.ArrayList.forEach(ArrayList.java:1259)
    at com.example.demo.map2bean.MapToBean.main(MapToBean.java:84)

六、Introspector類(lèi) 不太好用

這個(gè)用起來(lái),只能轉(zhuǎn)換第一層,而且不支持蛇型轉(zhuǎn)駝峰

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
 //----------------- Introspector    ------------------
    //map轉(zhuǎn)java對(duì)象
    public static <T> T introspector_mapToObject(Map<String, Object> map, Class<T> clazz) throws Exception {
        if (map == null) {
            return null;
        }
        T bean = clazz.newInstance();
        BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (PropertyDescriptor property : propertyDescriptors) {
            Method setter = property.getWriteMethod();
            if (setter != null) {
                setter.invoke(bean, map.get(property.getName()));
            }
        }
        return bean;
    }
    //java對(duì)象轉(zhuǎn)map
    public static Map<String, Object> introspector_objectToMap(Object obj) throws Exception {
        if (obj == null) {
            return null;
        }
        Map<String, Object> map = new HashMap<String, Object>();
        BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
        PropertyDescriptor[] propertyDescriptors = beanInfo
                .getPropertyDescriptors();
        for (PropertyDescriptor property : propertyDescriptors) {
            String key = property.getName();
            if (key.compareToIgnoreCase("class") == 0) {
                continue;
            }
            Method getter = property.getReadMethod();
            Object value = getter != null ? getter.invoke(obj) : null;
            map.put(key, value);
        }
        return map;
    }
        LTDemo ltDemo = introspector_mapToObject(map, LTDemo.class);
        Map demoMap = introspector_objectToMap(ltDemo);
        System.out.println("輸出map -> bean: " + ltDemo.toString());
        System.out.println("輸出bean -> map : " + demoMap);
        System.out.println(ltDemo.getApplyTime());
        System.out.println(ltDemo.getChildren());
        System.out.println(ltDemo.getChildren().get(0).toString());

輸出原生map: {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 16:56:37 CST 2023, age=2}], name=張三, apply_time=Fri Mar 03 16:56:37 CST 2023, age=20}
輸出map -> bean: LTDemo(name=張三, age=20, address=上海市, applyTime=null, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 16:56:37 CST 2023, age=2}])
輸出bean -> map : {address=上海市, children=[{address=上海市, name=小張, apply_time=Fri Mar 03 16:56:37 CST 2023, age=2}], name=張三, applyTime=null, age=20}
null
[{address=上海市, name=小張, apply_time=Fri Mar 03 16:56:37 CST 2023, age=2}]
Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to com.example.demo.map2bean.LTDemo
    at com.example.demo.map2bean.MapToBean.main(MapToBean.java:65)

總結(jié)

到此這篇關(guān)于Java map和bean互轉(zhuǎn)常用方法的文章就介紹到這了,更多相關(guān)Java map和bean互轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA實(shí)現(xiàn)redis分布式雙重加鎖的示例代碼

    JAVA實(shí)現(xiàn)redis分布式雙重加鎖的示例代碼

    在高并發(fā)環(huán)境下,通過(guò)Redis分布式鎖實(shí)現(xiàn)數(shù)據(jù)唯一性校驗(yàn)非常關(guān)鍵,為避免用戶數(shù)據(jù)重復(fù),可使用Redis鎖或集合數(shù)據(jù)結(jié)構(gòu)進(jìn)行前置檢查,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • Java集合之同步容器詳解

    Java集合之同步容器詳解

    這篇文章主要為大家詳細(xì)介紹了Java集合之同步容器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java中常用修飾符的使用方法匯總

    Java中常用修飾符的使用方法匯總

    下面小編就為大家?guī)?lái)一篇Java中常用修飾符的使用方法匯總。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Mybatis-Plus?動(dòng)態(tài)表名的實(shí)踐

    Mybatis-Plus?動(dòng)態(tài)表名的實(shí)踐

    本文主要介紹了Mybatis-Plus?動(dòng)態(tài)表名的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Java基本類(lèi)型包裝類(lèi)概述與Integer類(lèi)、Character類(lèi)用法分析

    Java基本類(lèi)型包裝類(lèi)概述與Integer類(lèi)、Character類(lèi)用法分析

    這篇文章主要介紹了Java基本類(lèi)型包裝類(lèi)概述與Integer類(lèi)、Character類(lèi)用法,結(jié)合實(shí)例形式分析了java基本數(shù)據(jù)類(lèi)型與字符串轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • Java8中l(wèi)ambda表達(dá)式的應(yīng)用及一些泛型相關(guān)知識(shí)

    Java8中l(wèi)ambda表達(dá)式的應(yīng)用及一些泛型相關(guān)知識(shí)

    這篇文章主要介紹了Java8中l(wèi)ambda表達(dá)式的應(yīng)用及一些泛型相關(guān)知識(shí)的相關(guān)資料
    2017-01-01
  • JAVA SFTP文件上傳、下載及批量下載實(shí)例

    JAVA SFTP文件上傳、下載及批量下載實(shí)例

    本篇文章主要介紹了JAVA SFTP文件上傳、下載及批量下載實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • MySQL MAX(IF())中table.column有值但顯示default的解決方案

    MySQL MAX(IF())中table.column有值但顯示default的解決方案

    這篇文章主要介紹了MySQL MAX(IF())中table.column有值但顯示default的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-11-11
  • ToStringBuilder類(lèi)的一些心得

    ToStringBuilder類(lèi)的一些心得

    ToStringBuilder類(lèi)的一些心得,需要的朋友可以參考一下
    2013-02-02
  • java導(dǎo)出到excel常用的幾種方式總結(jié)

    java導(dǎo)出到excel常用的幾種方式總結(jié)

    導(dǎo)出excel是咱Java開(kāi)發(fā)的必備技能啦,之前項(xiàng)目有這個(gè)功能,現(xiàn)在將其獨(dú)立出來(lái),分享一下,下面這篇文章主要給大家介紹了關(guān)于java導(dǎo)出到excel常用的幾種方式,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

五常市| 古蔺县| 米泉市| 永兴县| 拉萨市| 岗巴县| 太原市| 南丰县| 建宁县| 大理市| 安顺市| 通州市| 曲阳县| 杭州市| 大洼县| 玉树县| 大英县| 巨野县| 额尔古纳市| 汨罗市| 济南市| 卓资县| 乌恰县| 西吉县| 乐至县| 兰溪市| 罗定市| 嵊州市| 韶关市| 鄂伦春自治旗| 曲靖市| 遂川县| 临夏县| 延津县| 桃园县| 泰宁县| 兴文县| 楚雄市| 柳河县| 常州市| 云安县|