第一种方法:使用java自省方法自己来实现的
Person类:
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private Long id;
public Person() {
super();
}
public Person(String name, Long id) {
super();
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public String toString() {
return "Person [name=" + name + ", id=" + id + "]";
}
}
实现及测试:
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class BeanTMap<T> {
public static void main(String[] args) {
Person person = new Person("aaa",11l);
BeanTMap<Person> beanTMap = new BeanTMap<Person>();
Map<String, Object> bean2Map = beanTMap.bean2Map(person);
System.out.println(bean2Map.toString());
}
public Map<String, Object> bean2Map(T t) {
BeanInfo beanInfo = null;
Map<String, Object> map = new HashMap<String, Object>();
try {
beanInfo = Introspector.getBeanInfo(t.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
String name = propertyDescriptor.getName();
Method readMethod = propertyDescriptor.getReadMethod();
map.put(name, readMethod.invoke(t, null));
}
} catch (IntrospectionException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return map;
}
}
使用Apache Commons BeanUtils
<!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
public Map<String, String> bean2Map2(T t) {
Map<String, String> map = new HashMap<String, String>();
try {
map = BeanUtils.describe(t);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
return map;
}
测试代码
Person person = new Person("aaa",11l);
BeanTMap<Person> beanTMap = new BeanTMap<Person>();
Map<String, String> bean2Map = beanTMap.bean2Map2(person);
System.out.println(bean2Map.toString());