javaBean与Map互转

背景:有时候想不通阿帕奇的BeanUtils是怎么进行map和Bean互相转化的。

工作闲暇之余,自己写个一小段代码,一探究竟,试试才发现,原来一切并非我们想的那么什么和复杂。

注:这里只是简单实例,不追求严密的代码规范和异常处理。

首先,新建一个工具类BeanUtils.java.

辅助实体类Person.java,如下:

public class Person {
private String name;
private int age;
private boolean adult; public Person(String name, int age, boolean isAdult) {
this.name = name;
this.age = age;
this.adult = isAdult;
} @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", adult=" + adult + "]";
}
public Person() {
}
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;
} public boolean isAdult() {
return adult;
} public void setAdult(boolean adult) {
this.adult = adult;
} }

1.JavaBean 转换为Map<String,Object>;

//bean 转化为map
public static Map<String,Object> tranferBean2Map(Object obj) throws Exception{
//obj为空,结束方法
if(obj==null)
return null;
Map<String, Object> map=new HashMap<String, Object>();
/*Introspector 类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。
* java的自省机制
* */
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] ps = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : ps) {
String key = propertyDescriptor.getName(); if(!"class".equals(key)){
Method getter = propertyDescriptor.getReadMethod();
Object value = getter.invoke(obj);
map.put(key, value);
}
}
return map; }

2.Map<String,Object>转换为JavaBean ,使用简单的泛型;

//map转换为javaBean
public static <T extends Object> T transferMap2Bean(Map<String,Object> map,Class<T> clazz) throws Exception{
T instance = clazz.newInstance();
BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : descriptors) {
String key=property.getName();
if(map.containsKey(key)){
Object value = map.get(key);
Method setter = property.getWriteMethod();
setter.invoke(instance, value);
} } return instance;
}

经过测试,可以成功进行map和javabean的互转。

Introspector 类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。

上一篇:JavaBean与Map相互转换


下一篇:JavaBean和Map的相互转换