常用的map转bean互转方法

这篇具有很好参考价值的文章主要介绍了常用的map转bean互转方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、hutool工具类

这个很常用,还支持将蛇形转成驼,如:apply_time 会赋值到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工具类

这个也很常用,也支持将蛇型转成驼峰,
如:apply_time 会赋值到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工具类 不太好用

嵌套型map,转换会有问题,且不支持蛇型转成驼峰

    //-------------------    beanutils_BeanUtils  -----------------
    //map转java对象
    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工具类 不太好用

这个也很常用,也支持将蛇形转成驼,如:apply_time 会赋值到applyTime上

import net.sf.cglib.beans.BeanMap;

    // -------------------   cglib BeanMap  -------------------
    //map对象转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对象转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 反射来玩 不太好玩

    //-------------------   reflect     -------------------
    //map转java对象
    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对象转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类 不太好用

这个用起来,只能转换第一层,而且不支持蛇型转驼峰


import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;

 //----------------- Introspector    ------------------

    //map转java对象
    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对象转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)

总结

不想说啥…看着用吧文章来源地址https://www.toymoban.com/news/detail-600962.html

到了这里,关于常用的map转bean互转方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java-json相关转换,JSONObject与实体类/map互转、List/List<map>和JSONArray互转、获取JSONObject中的key value、字符串String转换等

    博客背景是Java开发。json相关的转换、取值等在日常开发中经常使用,但有时候还是会忘记or遇到些奇奇怪怪的问题。以此记录,提醒自己~不定期更新~ 实体类和JSONObject互转 Map和JSONObject互转 String转JSONObject 实体类转JSON字符串时不过滤NULL空值 获取JSONObject中的key value List和

    2024年02月12日
    浏览(81)
  • 进阶JAVA篇- Map 系列集合的遍历方法与常用API

    目录         1.0 Map 集合的说明         1.1 Map 集合的常用方法         1.2 Map 系列集合的特点         2.0 Map 系列集合的遍历方法(三种方法)          2.1 使用 keySet() 方法遍历         2.2 使用 entrySet() 方法遍历         2.3 使用 forEach() 方法遍历(Java 8+)  

    2024年02月08日
    浏览(52)
  • JSON转换:实体类和JSONObject互转,List和JSONArray互转,map和JSONObject,JSONarray互转(fastjson版)

    1.实体类和JSONObject互转 2.List和JSONArray互转 3.Map和JSONObject互转(同1.) 4.ListMap和JSONArray互转(同2.) 5.取数据 6.JSONArray转String{} 7.数组转jsonarry 注: 由上示例可知任意数据类型均可通过JSON.toJSON(xxx)转换成对应的JSONObject或JSONArray

    2024年01月19日
    浏览(54)
  • List<Entity>与Map<String, Entity>互转

    List 转为 MapString, Entity 要将 ListEntity 转换为 MapString, Entity,你需要指定一个属性作为 Map 的键,然后将 List 中的每个实体对象的该属性值作为键,实体对象本身作为值放入 Map 中。以下是一个示例代码: 假设你有一个名为 Entity 的实体类,其中有一个属性名为 id ,你想将 Lis

    2024年04月22日
    浏览(35)
  • nlohmann json:实现map和struct的互转

    可以借助json实现map和struct的互转:

    2024年02月11日
    浏览(45)
  • Hive之Map常用方法

    实际工作中,有时会出现map复杂数据类型,字段field1形式如:{‘k0’:‘abc’,‘k1’:‘01,02,03’,‘k2’:‘456’},如果是string形式,我们可以适用get_json_object 函数,取出对应的value值,具体如:get_json_object(field,‘$.k0’),即可取出值abc,如果是map数据类型,这个值该怎么取呢

    2023年04月24日
    浏览(28)
  • Java Base64字符串与String字符串互转方法

    在使用String转Base64和Base64转String上有点小问题,特此记录。 结果: 也是跟上面差不多的思路,将Base64转为byte数组,再转为String

    2024年02月15日
    浏览(60)
  • JavaScript -- Map对象及常用方法介绍

    Map用来存储键值对结构的数据**(key-value)** Object中存储的数据就可以认为是一种 键值对结构 Map和Object的主要区别: Object中的属性名只能是 字符串或符号 ,如果传递了一个其他类型的属性名,JS解释器会自动将其 转换为字符串 Map中任何类型的值都可以成为数据的key map.si

    2024年02月10日
    浏览(53)
  • Flutter中Map、List数组的常用方法

    Dart语言是Flutter开发的必备语言,官方地址如下:Dart:https://dart.cn/ 使用dart工具来运行这些常用的方法,工具:https://dartpad.cn 在Dart中,Map用来存储对像类型的数据,List与Set用来存储数组类型的数据。 Map的创建实例如下: 创建有一个有初始值的Map,代码如下: 根据List数据来

    2024年02月08日
    浏览(48)
  • JavaScript 之 常用迭代方法forEach、filter()、map()、reduce()

    代码如下: 如下: 代码简洁很多,如下: 简介 : filter() 方法创建给定数组一部分的浅拷贝,其包含通过所提供函数实现的测试的所有元素。 语法 : 参数、返回值 描述 参考官网: 官网——Array.prototype.filter(). 代码如下: 代码如下: 下例使用 filter() 根据搜索条件来过滤数

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包