java对象和Map之间互相转换的三种实现方式
1:测试类
package com.test.java;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* java对象和Map之间的互相转换的三种实现方式
* @author
*
*/
public class PojoToMap {
public static void main(String[] args) throws Exception {
//beanutilMmapToPojo();
//beanutilPojoToMap();
//IntrospectorMapToObject();
//IntrospectorObjectToMap();
//ReflectMapToObject();
//ReflectObjectToMap();
}
/**
* 转换测试函数(MapToObject)
* @throws Exception
*/
public static void beanutilMmapToPojo() throws Exception{
Map<String, Object> map = new HashMap<String, Object>();
List<String> interests = new ArrayList<String>();
interests.add("足球");
interests.add("篮球");
map.put("age", 25);
map.put("name", "张国荣");
map.put("sex", "男");
map.put("interests", interests);
Person p = (Person) MapAndPojoChang.mapToObject(map, Person.class);
for(String interest:p.getInterests()){
System.out.println(interest);
}
}
/**
* Introspector转换测试函数(MapToObject)
* @throws Exception
*/
public static void IntrospectorObjectToMap() throws Exception{
Map<String, Object> personMap = MapAndPojoChangByIntrospector.objectToMap(buildPerson());
if(!personMap.isEmpty()){
Set<Entry<String, Object>> entrySet = personMap.entrySet();
Iterator<Entry<String, Object>> iterator = entrySet.iterator();
for(int i = 0;i<entrySet.size();i++){
if(iterator.hasNext()){
Entry<String, Object> next = iterator.next();
if(next.getKey().equals("class")){
continue;
}else{
System.out.println(next.getValue());
}
}
}
}
}
/**
* Reflect转换测试函数(MapToObject)
* @throws Exception
*/
public static void ReflectObjectToMap() throws Exception{
Map<String, Object> personMap = MapAndPojoChangByReflect.objectToMap(buildPerson());
if(!personMap.isEmpty()){
Set<Entry<String, Object>> entrySet = personMap.entrySet();
Iterator<Entry<String, Object>> iterator = entrySet.iterator();
for(int i = 0;i<entrySet.size();i++){
if(iterator.hasNext()){
Entry<String, Object> next = iterator.next();
if(next.getKey().equals("class")){
continue;
}else{
System.out.println(next.getValue());
}
}
}
}
}
/**
* Reflect转换测试函数(MapToObject)
* @throws Exception
*/
public static void ReflectMapToObject() throws Exception{
Person person = (Person)MapAndPojoChangByReflect.mapToObject(buildPersonMap(), Person.class);
if(person!=null){
String str = "姓名:--"+person.getName()+","+"年龄:--"+person.getAge()+","+"性别:--"+person.getSex()+",";
for(String interest:person.getInterests()){
if(str.contains("兴趣:")){
str.replaceAll("兴趣:", "");
str = str+interest;
}else{
str = str+="兴趣:"+interest;
}
}
System.out.println(str);
}
}
/**
* Introspector转换测试函数(MapToObject)
* @throws Exception
*/
public static void IntrospectorMapToObject() throws Exception{
Person person = (Person)MapAndPojoChangByIntrospector.mapToObject(buildPersonMap(), Person.class);
if(person!=null){
String str = "姓名:--"+person.getName()+","+"年龄:--"+person.getAge()+","+"性别:--"+person.getSex()+",";
for(String interest:person.getInterests()){
if(str.contains("兴趣:")){
str.replaceAll("兴趣:", "");
str = str+interest;
}else{
str = str+="兴趣:"+interest;
}
}
System.out.println(str);
}
}
/**
* 转换测试函数(ObjectToMap)
*/
public static void beanutilPojoToMap() throws Exception{
Person person = new Person();
person.setAge(25);
person.setName("张国荣");
person.setSex("男");
List<String> interests = new ArrayList<String>();
interests.add("足球");
interests.add("篮球");
person.setInterests(interests);
@SuppressWarnings("unchecked")
Map<String,Object> map = (Map<String, Object>) MapAndPojoChang.objectToMap(person);
if(!map.isEmpty()){
Set<Entry<String, Object>> entrySet = map.entrySet();
Iterator<Entry<String, Object>> iterator = entrySet.iterator();
for(int i = 0;i<entrySet.size();i++){
if(iterator.hasNext()){
Entry<String, Object> next = iterator.next();
if(next.getKey().equals("class")){
continue;
}else{
System.out.println(next.getValue());
}
}
}
}
}
/**
* 构建Person
* @return
*/
public static Person buildPerson(){
Person person = new Person();
person.setAge(25);
person.setName("张国荣");
person.setSex("男");
List<String> interests = new ArrayList<String>();
interests.add("足球");
interests.add("篮球");
person.setInterests(interests);
return person;
}
public static Map<String,Object> buildPersonMap(){
Map<String, Object> map = new HashMap<String, Object>();
List<String> interests = new ArrayList<String>();
interests.add("足球");
interests.add("篮球");
map.put("age", 25);
map.put("name", "张国荣");
map.put("sex", "男");
map.put("interests", interests);
return map;
}
}
class MapAndPojoChang {
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
if (map == null)
return null;
Object obj = beanClass.newInstance();
org.apache.commons.beanutils.BeanUtils.populate(obj, map);
return obj;
}
public static Map<?, ?> objectToMap(Object obj) {
if(obj == null)
return null;
return new org.apache.commons.beanutils.BeanMap(obj);
}
}
class MapAndPojoChangByIntrospector {
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
if (map == null)
return null;
Object obj = beanClass.newInstance();
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
Method setter = property.getWriteMethod();
if (setter != null) {
setter.invoke(obj, map.get(property.getName()));
}
}
return obj;
}
public static Map<String, Object> objectToMap(Object obj) throws Exception {
if(obj == null)
return null;
Map<String, Object> map = new HashMap<String, Object>();
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
if (key.compareToIgnoreCase("class") == 0) {
continue;
}
Method getter = property.getReadMethod();
Object value = getter!=null ? getter.invoke(obj) : null;
map.put(key, value);
}
return map;
}
}
class MapAndPojoChangByReflect {
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {
if (map == null)
return null;
Object obj = beanClass.newInstance();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
int mod = field.getModifiers();
if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){
continue;
}
field.setAccessible(true);
field.set(obj, map.get(field.getName()));
}
return obj;
}
public static Map<String, Object> objectToMap(Object obj) throws Exception {
if(obj == null){
return null;
}
Map<String, Object> map = new HashMap<String, Object>();
Field[] declaredFields = obj.getClass().getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
return map;
}
}
Person实体类
package com.test.java;
import java.util.List;
public class Person {
private int age;
private String name;
private String sex;
private List<String> interests;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public List<String> getInterests() {
return interests;
}
public void setInterests(List<String> interests) {
this.interests = interests;
}
}