package com.nemo.web.modules.map.utils;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.collections.map.HashedMap;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.Map;
/** * Created by nemo on 16-6-23. * Bean 操作类 */
public class BeanUtil {
/**
* // Map --> Bean 2: 利用org.apache.commons.beanutils 工具类实现 Map --> Bean
* @param map
* @param obj
* @return
*/
public static Object transMap2Bean2(Map, Object> map, Object obj) {
if (map == null || obj == null) {
return new Object();
}
try {
BeanUtils.populate(obj, map);
} catch (Exception e) {
System.out.println("transMap2Bean2 Error " + e);
}
return obj;
}
/**
* Map --> Bean 1: 利用Introspector,PropertyDescriptor实现 Map --> Bean
* @param map
* @param obj
* @return
*/
public static Object transMap2Bean(Map, Object> map, Object obj) {
try {
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
if (map.containsKey(key)) {
Object value = map.get(key); // 得到property对应的setter方法
Method setter = property.getWriteMethod();
setter.invoke(obj, value);
}
}
} catch (Exception e) {
System.out.println("transMap2Bean Error " + e);
}
return obj;
}
/**
* Bean --> Map 1: 利用Introspector和PropertyDescriptor 将Bean --> Map
* @param obj
* @return
*/
public static Map, Object> transBean2Map(Object obj) {
if(obj == null){
return null;
}
Map, Object> map = new HashedMap();
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) {
System.out.println("transBean2Map Error " + e);
}
return map;
}
}