前言:
实体类和map相互转换,实体类需要有无参构造,不然会出现异常。
一:BeanUtils类来实现
pom:
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
代码:
package com.x;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
public class BeanTest {
public static Map<String, Object> beanToMap(Object bean) {
if (null == bean)
return null;
try {
Map<String, Object> map = BeanUtils.describe(bean);
// 移除key=class
map.remove("class");
System.out.println("JavaBean-->Map转换前:" + bean.toString());
System.out.println("JavaBean-->Map转换后:" + map);
return map;
} catch (Exception e) {
System.out.println("JavaBean-->Map转换失败:" + e.getMessage());
e.printStackTrace();
return null;
}
}
public static <T> T mapToBean(Class<?> clazz, Map map) {
try {
T newBeanInstance = (T) clazz.newInstance();
BeanUtils.populate(newBeanInstance, map);
System.out.println("Map-->JavaBean转换前:" + map);
System.out.println("Map-->JavaBean转换后:" + newBeanInstance.toString());
return newBeanInstance;
} catch (Exception e) {
System.out.println("Map-->JavaBean转换失败:" + e.getMessage());
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("name", "谢辉");
hashMap.put("age", 18);
// map转实体类
Xieh people = mapToBean(Xieh.class, hashMap);
// 实体类转map
Map map = beanToMap(people);
// 打印执行结果
System.out.println(people.toString());
System.out.println(map);
}
}
二:jdk自带方法
代码:
package com.x2;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class BeanTest {
public static Map<String, Object> bean2Map(Object obj) {
if (obj == null) {
return null;
}
Map<String, Object> map = new HashMap<String, Object>();
try {
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
// 过滤class属性
if (!key.equals("class")) {
// 得到property对应的getter方法
Method getter = property.getReadMethod();
Object value = getter.invoke(obj);
map.put(key, value);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
public static Object mapToBean(Class type, Map map) {
Object obj = null;
try {
BeanInfo beanInfo = Introspector.getBeanInfo(type);
obj = type.newInstance();
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor descriptor : propertyDescriptors) {
String propertyName = descriptor.getName();
if (map.containsKey(propertyName)) {
Object value = map.get(propertyName);
descriptor.getWriteMethod().invoke(obj, value);
}
}
} catch (Exception e) {
System.out.println("map转实体类出现异常");
}
return obj;
}
public static void main(String[] args) {
Xieh xieh = new Xieh();
xieh.setName("谢辉");
xieh.setAge(23);
Map<String, Object> map = bean2Map(xieh);
System.out.println(map.toString());
Xieh object = (Xieh) mapToBean(Xieh.class, map);
System.out.println(object.toString());
}
}
测试实体类
package com.x2;
import java.io.Serializable;
public class Xieh implements Serializable {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Xieh [name=" + name + ", age=" + age + "]";
}
}