当前位置: 代码网 > it编程>编程语言>Java > Java对象和Map之间相互转换的五种方法

Java对象和Map之间相互转换的五种方法

2025年02月13日 Java 我要评论
引言在java开发中,经常需要将java对象转换成map,或者反过来将map转换成java对象。这种转换在很多场景下都非常有用,比如在序列化和反序列化过程中、在数据传输和持久化时、或者在进行对象属性的

引言

在java开发中,经常需要将java对象转换成map,或者反过来将map转换成java对象。这种转换在很多场景下都非常有用,比如在序列化和反序列化过程中、在数据传输和持久化时、或者在进行对象属性的批量操作时。

本文将介绍几种不同的方法来实现java对象和map之间的相互转换,选择哪种方法取决于项目的具体需求和个人偏好。

一、使用spring framework的reflectionutils

1.1、bean转为map

 @test
    public void bean2map(){
        person person=new person();
        person.setname("tiger");
        person.setage(18);
        person.setaddress("中国");
        person.setcity("深圳");
        system.out.println(person);
        system.out.println(bean2map(person));
        system.out.println(bean2map2(person));
    }


    public static map<string, object> bean2map(object object) {
        map<string, object> map = new hashmap<>();
        reflectionutils.dowithfields(object.getclass(), field -> {
            field.setaccessible(true);
            object value = reflectionutils.getfield(field, object);
            if (value != null) {
                map.put(field.getname(), value);
            }
        });
        return map;
    }
    public static map<string, object> bean2map2(object object) {
        map<string, object> map = new hashmap<>();
        class<?> clazz = object.getclass();
        field[] fields = clazz.getdeclaredfields();
        for (field field : fields) {
            field.setaccessible(true);
            try {
                object value = field.get(object);
                if (value != null) {
                    map.put(field.getname(), value);
                }
            } catch (illegalaccessexception e) {
                throw new runtimeexception("error accessing field: " + field.getname(), e);
            }
        }
        return map;
    }

结果输出:

在这里插入图片描述

1.2、map转为bean

@test
    public void map2bean() throws illegalaccessexception, instantiationexception {
        map<string, object> map = new hashmap();
        map.put("name", "tigerhhzz");
        map.put("age", 18);
        map.put("address","中国");
        map.put("city", "北京");
        system.out.println(map);
        system.out.println(map2bean(map, person.class));
        system.out.println(map2bean2(map, person.class));
    }

    public static <t> t map2bean(map<string, object> map, class<t> clazz) throws illegalaccessexception, instantiationexception {
        t instance = clazz.newinstance();
        reflectionutils.dowithfields(clazz, field -> {
            field.setaccessible(true);
            if (map.containskey(field.getname())) {
                reflectionutils.setfield(field, instance, map.get(field.getname()));
            }
        });
        return instance;
    }

    public static <t> t map2bean2(map<string, object> map, class<t> clazz) throws illegalaccessexception, instantiationexception {
        t instance = clazz.newinstance();
        field[] fields = clazz.getdeclaredfields();
        for (field field : fields) {
            field.setaccessible(true);
            if (map.containskey(field.getname())) {
                field.set(instance, map.get(field.getname()));
            }
        }
        return instance;
    }

结果输出:

在这里插入图片描述

二、使用hutool工具

2.1、引入hutool依赖

		<dependency>
			<groupid>cn.hutool</groupid>
			<artifactid>hutool-all</artifactid>
			<version>5.5.9</version>
		</dependency>

2.2、bean转为map

    @test
    public void bean2map(){
        person person=new person();
        person.setname("tiger");
        person.setage(18);
        person.setaddress("中国");
        person.setcity("深圳");

        map<string, object> map = beanutil.beantomap(person);

        system.out.println(person);
        system.out.println(bean2map(person));
        system.out.println(bean2map2(person));

        system.out.println(map);
    }

结果输出:

在这里插入图片描述

2.3、map转为bean

    @test
    public void map2bean() throws illegalaccessexception, instantiationexception {
        map<string, object> map = new hashmap();
        map.put("name", "tigerhhzz");
        map.put("age", 18);
        map.put("address","中国");
        map.put("city", "北京");

        person person = beanutil.tobean(map, person.class);

        system.out.println(map);
        system.out.println(map2bean(map, person.class));
        system.out.println(map2bean2(map, person.class));

        system.out.println(person);
    }

结果输出:

在这里插入图片描述

三、使用jackson工具

3.1、bean转为map

    @test
    public void bean2map(){
        person person=new person();
        person.setname("tiger");
        person.setage(18);
        person.setaddress("中国");
        person.setcity("深圳");

        map<string, object> map = beanutil.beantomap(person);

        system.out.println(person);
        system.out.println(bean2map(person));
        system.out.println(bean2map2(person));

        system.out.println(map);

        system.out.println(bean2mapbyjackson(person));
    }

转换方法:

    public static map<string, object> bean2mapbyjackson(object object) {
        objectmapper objectmapper = new objectmapper();
        return objectmapper.convertvalue(object, new typereference<map<string, object>>() {
        });
    }

结果输出:

在这里插入图片描述

3.2、map转为bean

    @test
    public void map2bean() throws illegalaccessexception, instantiationexception {
        map<string, object> map = new hashmap();
        map.put("name", "tigerhhzz");
        map.put("age", 18);
        map.put("address","中国");
        map.put("city", "北京");

        person person = beanutil.tobean(map, person.class);

        system.out.println(map);
        system.out.println(map2beanbyreflectionutils(map, person.class));
        system.out.println(map2bean2byreflectionutils(map, person.class));

        system.out.println(person);

        system.out.println(map2beanbyjackson(map, person.class));
    }

转换方法:

    public static <t> t map2beanbyjackson(map<string, object> map, class<t> clazz){
        objectmapper objectmapper = new objectmapper();
        return objectmapper.convertvalue(map, clazz);
    }

结果输出:

在这里插入图片描述

四、使用apache commons lang的beanutils

4.1、引入依赖

		<!-- commons-lang3 -->
		<dependency>
			<groupid>org.apache.commons</groupid>
			<artifactid>commons-lang3</artifactid>
			<version>3.12.0</version>
		</dependency>
		<dependency>
			<groupid>commons-beanutils</groupid>
			<artifactid>commons-beanutils</artifactid>
			<version>1.9.4</version>
		</dependency>

4.2、bean转为map

转换方法:

    public static map<string, string> bean2mapbycommonslang3(object object) {
        try {
            return beanutils.describe(object);
        } catch (exception e) {
            throw new runtimeexception("error converting object to map: " + e.getmessage(), e);
        }
    }
    @test
    public void bean2map(){
        person person=new person();
        person.setname("tiger");
        person.setage(18);
        person.setaddress("中国");
        person.setcity("深圳");

        map<string, object> map = beanutil.beantomap(person);

        system.out.println(person);
        system.out.println(bean2map(person));
        system.out.println(bean2map2(person));

        system.out.println(map);

        system.out.println(bean2mapbyjackson(person));

        system.out.println(bean2mapbycommonslang3(person));
    }

结果输出:

在这里插入图片描述

4.3、map转为bean

转换方法:

    public static <t> t map2beanbycommonslang3(map<string, ?> map, class<t> clazz) {
        try {
            t instance = clazz.newinstance();
            beanutils.populate(instance, map);
            return instance;
        } catch (exception e) {
            throw new runtimeexception("error converting map to object: " + e.getmessage(), e);
        }
    }
    @test
    public void map2bean() throws illegalaccessexception, instantiationexception {
        map<string, object> map = new hashmap();
        map.put("name", "tigerhhzz");
        map.put("age", 18);
        map.put("address","中国");
        map.put("city", "北京");

        person person = beanutil.tobean(map, person.class);

        system.out.println(map);
        system.out.println(map2beanbyreflectionutils(map, person.class));
        system.out.println(map2bean2byreflectionutils(map, person.class));

        system.out.println(person);

        system.out.println(map2beanbyjackson(map, person.class));

        system.out.println(map2beanbycommonslang3(map, person.class));
    }

结果输出:

在这里插入图片描述

五、使用fastjson工具

5.1、 引入fastjson依赖

<dependency>
    <groupid>com.alibaba</groupid>
    <artifactid>fastjson</artifactid>
    <version>1.2.83</version>
</dependency>

5.2、 bean转为map

    @test
    public void bean2map(){
        person person=new person();
        person.setname("tiger");
        person.setage(18);
        person.setaddress("中国");
        person.setcity("深圳");

        map<string, object> map = beanutil.beantomap(person);

        system.out.println(person);
        system.out.println(bean2map(person));
        system.out.println(bean2map2(person));

        system.out.println(map);

        system.out.println(bean2mapbyjackson(person));

        system.out.println(bean2mapbycommonslang3(person));

        system.out.println(jsonobject.parseobject(jsonobject.tojsonstring(person)));
    }

结果输出:

在这里插入图片描述

5.3、 map转为bean

    @test
    public void map2bean() throws illegalaccessexception, instantiationexception {
        map<string, object> map = new hashmap();
        map.put("name", "tigerhhzz");
        map.put("age", 18);
        map.put("address","中国");
        map.put("city", "北京");

        person person = beanutil.tobean(map, person.class);

        system.out.println(map);
        system.out.println(map2beanbyreflectionutils(map, person.class));
        system.out.println(map2bean2byreflectionutils(map, person.class));

        system.out.println(person);

        system.out.println(map2beanbyjackson(map, person.class));

        system.out.println(map2beanbycommonslang3(map, person.class));

        system.out.println(jsonobject.parseobject(jsonobject.tojsonstring(map), person.class));
    }

结果输出:

在这里插入图片描述

以上就是java对象和map之间相互转换的五种方法的详细内容,更多关于java对象和map互转的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com