- 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;
- /**
- * JavaBean and map converter.
- *
- *
- */
- public final class BeanMapUtils {
- /**
- * Converts a map to a JavaBean.
- *
- * @param type type to convert
- * @param map map to convert
- * @return JavaBean converted
- * @throws IntrospectionException failed to get class fields
- * @throws IllegalAccessException failed to instant JavaBean
- * @throws InstantiationException failed to instant JavaBean
- * @throws InvocationTargetException failed to call setters
- */
- public static final Object toBean(Class<?> type, Map<String, ? extends Object> map)
- throws IntrospectionException, IllegalAccessException, InstantiationException, InvocationTargetException {
- BeanInfo beanInfo = Introspector.getBeanInfo(type);
- Object obj = type.newInstance();
- PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
- for (int i = 0; i< propertyDescriptors.length; i++) {
- PropertyDescriptor descriptor = propertyDescriptors[i];
- String propertyName = descriptor.getName();
- if (map.containsKey(propertyName)) {
- Object value = map.get(propertyName);
- Object[] args = new Object[1];
- args[0] = value;
- descriptor.getWriteMethod().invoke(obj, args);
- }
- }
- return obj;
- }
- /**
- * Converts a JavaBean to a map.
- *
- * @param bean JavaBean to convert
- * @return map converted
- * @throws IntrospectionException failed to get class fields
- * @throws IllegalAccessException failed to instant JavaBean
- * @throws InvocationTargetException failed to call setters
- */
- public static final Map<String, Object> toMap(Object bean)
- throws IntrospectionException, IllegalAccessException, InvocationTargetException {
- Map<String, Object> returnMap = new HashMap<String, Object>();
- BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());
- PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
- for (int i = 0; i< propertyDescriptors.length; i++) {
- PropertyDescriptor descriptor = propertyDescriptors[i];
- String propertyName = descriptor.getName();
- if (!propertyName.equals("class")) {
- Method readMethod = descriptor.getReadMethod();
- Object result = readMethod.invoke(bean, new Object[0]);
- if (result != null) {
- returnMap.put(propertyName, result);
- } else {
- returnMap.put(propertyName, "");
- }
- }
- }
- return returnMap;
- }
- }
说明:
(1)上面的方法是对象转map,是根据方法getter方法来的。
字段的属性不管是private或者public都可以。只要相应的字段实现了getter即可。
(2)注意这里如果是继承的关系也是一样的,父类的字段实现getter方法即可,类如:
People.java
public People {
public int age;
String name;
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
Student.java
public Student extends People{
public float score;
public int getScore() {
return age;
}
}