前言
很多公司代码都会有一大堆工具类。常用的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);
}