1.bean转换map(java自省)
第一种方法:使用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());