JavaBean转换为Map的几种方式

本文介绍了在Java中将普通javabean转换为Map的三种方法:使用Apache Commons的BeanUtils,Hutool的BeanUtil以及自定义的Spring框架配合方法。详细展示了每种方法的代码实现,并通过测试用例进行验证。
摘要由CSDN通过智能技术生成

前言

很多公司代码都会有一大堆工具类。常用的String工具类,日期工具类,对象工具类等。
在对象工具类中,有一种场景会经常使用,是将一个普通的java bean 转换为Map。这里来看看几种写法。

1、写法1

使用 apache 的 commons 工具类中的 BeanUtils:

org.apache.commons.beanutils.BeanUtils.describe(Object bean);

2、写法2

使用 Hutool 中的 BeanUtil:
首先引入依赖:

<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.16</version>
        </dependency>

然后使用:BeanUtil.toBean

3、写法3

配合Spring 框架自己写:

	@SuppressWarnings("unchecked")
    public static <T> Map<String, Object> beanToMap(T bean, boolean ignoreNullValue) {
        BeanMap beanMap = BeanMap.create(bean);
        Map<String, Object> map = new HashMap<>(beanMap.size());
        beanMap.forEach((key, value) -> {
            if (ignoreNullValue && Objects.nonNull(value)) {
                map.put(String.valueOf(key), value);
            }
            if (!ignoreNullValue) {
                map.put(String.valueOf(key), value);
            }
        });
        return map;
    }

    // 忽略空值
    public static <T> Map<String, Object> beanToMapIgnoreNullValue(T bean) {
        return beanToMap(bean, true);
    }

    // 不忽略空值
    public static <T> Map<String, Object> beanToMapNotIgnoreNullValue(T bean) {
        return beanToMap(bean, false);
    }

测试

定义一个bean:

public class Person {
        private String id;
        private String name;
        private LocalDate birthday;
        private Integer age;

        public Person(String id, String name, LocalDate birthday, Integer age) {
            this.id = id;
            this.name = name;
            this.birthday = birthday;
            this.age = age;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public LocalDate getBirthday() {
            return birthday;
        }

        public void setBirthday(LocalDate birthday) {
            this.birthday = birthday;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }
    }

main 方法测试:

public static void main(String[] args) {
        Person person = new Person("1001", "小王吧", null, null);
        Map<String, Object> stringObjectMap = beanToMapIgnoreNullValue(person);
        // {name=小王吧, id=1001}
        System.out.println(stringObjectMap);

        Map<String, Object> stringObjectMap2 = beanToMapNotIgnoreNullValue(person);
        // {birthday=null, name=小王吧, id=1001, age=null}
        System.out.println(stringObjectMap2);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你家宝宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值