JavaBean是由属性+属性名组成;Map是由key-value的键值对组成。
如果把JavaBean的属性名看作是Map的key,把属性值看作是Map的value,那么一个Map对象和一个JavaBean是等级的。
我们可以使用apache的BeanUtils工具类进行JavaBean和Map之间的转换。
bean to map
JavaBean对象的所有属性都会成为Map的key值,另外增加一个key=class的值。
package com.test;
public class People {
private Integer age;
private String name;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "People [age=" + age + ", name=" + name + "]";
}
}
public void bean2map() {
People p = new People();
p.setName("test");
try {
Map<String, String> map = org.apache.commons.beanutils.BeanUtils.describe(p);
System.out.println("map="+map);
// 输出:map={name=test, class=class com.test.People, age=null}
//如果需要强制去除多余的key,加下一行代码
//map.remove("class");
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
e.printStackTrace();
}
}
map to bean
public void map2bean() {
People p = new People();
Map<String, String> map = new HashMap<>();
properties.put("name", "test");
try {
BeanUtils.populate(p, properties );
System.out.println(p);
// 输出:People [name=test, age=null]
} catch (IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
需要添加的 Maven 依赖
<!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>