Java中Bean与Map/Json/DBObject的相互转换

1.JavaBean

 

[java]  view plain  copy
 
  1. public class Person {  
  2.   
  3.     private String name;  
  4.     private Integer age;  
  5.     private String job;  
  6.     private List<String> school;  
  7.     private String address;  
  8.     private List<Score> score;  
  9.     //省略get/set方法  
  10. }  
[java]  view plain  copy
 
  1. public class Score {  
  2.   
  3.     private String cource_name;  
  4.     private Integer cource_score;  
  5.     //省略get/set方法  
  6. }  


2.JavaBean与Map相互转换(使用Apache Commons的BeanUtil实现)

 

 

[java]  view plain  copy
 
  1.        //Map<String,Object>转成JavaBean  
  2. //测试已通过,Bean中包含另一个Bean成员也可以  
  3. public static Object transMap2Bean(Map<String, Object> map, Object obj) {  
  4.     if (map == null || obj == null) {  
  5.         return null;BeanUtils  
  6.     }  
  7.     try {  
  8.         BeanUtils.populate(obj, map);  
  9.     } catch (Exception e) {  
  10.         e.printStackTrace();  
  11.         return null;  
  12.     }  
  13.     return obj;  
  14. }  
  15.   
  16. //JavaBean转成Map<String,Object>  
  17. //测试已通过,Bean中包含另一个Bean成员也可以  
  18. public static Map<String, Object> transBean2Map(Object obj) {  
  19.   
  20.     if (obj == null) {  
  21.         return null;  
  22.     }  
  23.     Map<String, Object> map = new HashMap<String, Object>();  
  24.     try {  
  25.         BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());  
  26.         PropertyDescriptor[] propertyDescriptors = beanInfo  
  27.                 .getPropertyDescriptors();  
  28.         for (PropertyDescriptor property : propertyDescriptors) {  
  29.             String key = property.getName();  
  30.   
  31.             // 过滤class属性  
  32.             if (!key.equals("class")) {  
  33.                 // 得到property对应的getter方法  
  34.                 Method getter = property.getReadMethod();  
  35.                 Object value = getter.invoke(obj);  
  36.   
  37.                 map.put(key, value);  
  38.             }  
  39.   
  40.         }  
  41.     } catch (Exception e) {  
  42.         e.printStackTrace();  
  43.         return null;  
  44.     }  
  45.   
  46.     return map;  
  47.   
  48. }  


3.JavaBean与Json相互转换(使用JSONObject实现,需要导入json-lib.jar)

 

 

[java]  view plain  copy
 
  1.        //json字符串转成JavaBean  
  2. //测试已通过  
  3. @SuppressWarnings("unchecked")  
  4. public static <T> T json2Bean(String jsonString, Class<T> beanCalss) {  
  5.            JSONObject jsonObject = JSONObject.fromObject(jsonString);  
  6.            T bean = (T) JSONObject.toBean(jsonObject, beanCalss);  
  7.           
  8.            return bean;  
  9.        }  
  10.   
  11. //JavaBean转成json字符串  
  12. //测试已通过  
  13. public static String beanToJson(Object bean) {  
  14.            JSONObject json = JSONObject.fromObject(bean);  
  15.            return json.toString();  
  16.    }  


4.JavaBean与DBObject相互转换(DBObject是MongoDB在Java驱动是使用的类)

 

 

[java]  view plain  copy
 
  1.        //DBObject转换成JavaBean  
  2. //测试已通过  
  3. public static <T> T dbObject2Bean(DBObject dbObject, T bean) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {    
  4.            if (bean == null) {  //测试已通过  
  5.                return null;    
  6.            }    
  7.            Field[] fields = bean.getClass().getDeclaredFields();    
  8.            for (Field field : fields) {    
  9.                String varName = field.getName();    
  10.                Object object = dbObject.get(varName);    
  11.                if (object != null) {    
  12.                    BeanUtils.setProperty(bean, varName, object);    
  13.                }    
  14.            }    
  15.            return bean;    
  16.        }  
  17.   
  18.        @SuppressWarnings("unchecked")  
  19. public static <T> DBObject bean2DBObject(T bean) throws IllegalArgumentException, IllegalAccessException {  
  20.     if (bean == null) {  
  21.         return null;  
  22.     }  
  23.     DBObject dbObject = new BasicDBObject();  
  24.     // 获取对象对应类中的所有属性域  
  25.     Field[] fields = bean.getClass().getDeclaredFields();  
  26.     for (Field field : fields) {  
  27.         // 获取属性名  
  28.         String varName = field.getName();  
  29.         // 修改访问控制权限  
  30.         boolean accessFlag = field.isAccessible();  
  31.         if (!accessFlag) {  
  32.             field.setAccessible(true);  
  33.         }  
  34.         Object param = field.get(bean);  
  35.         if (param == null) {  
  36.             continue;  
  37.         } else if (param instanceof Integer) {// 判断变量的类型  
  38.             int value = ((Integer) param).intValue();  
  39.             dbObject.put(varName, value);  
  40.         } else if (param instanceof String) {  
  41.             String value = (String) param;  
  42.             dbObject.put(varName, value);  
  43.         } else if (param instanceof Double) {  
  44.             double value = ((Double) param).doubleValue();  
  45.             dbObject.put(varName, value);  
  46.         } else if (param instanceof Float) {  
  47.             float value = ((Float) param).floatValue();  
  48.             dbObject.put(varName, value);  
  49.         } else if (param instanceof Long) {  
  50.             long value = ((Long) param).longValue();  
  51.             dbObject.put(varName, value);  
  52.         } else if (param instanceof Boolean) {  
  53.             boolean value = ((Boolean) param).booleanValue();  
  54.             dbObject.put(varName, value);  
  55.         } else if (param instanceof Date) {  
  56.             Date value = (Date) param;  
  57.             dbObject.put(varName, value);  
  58.         } else if (param instanceof List) {  
  59.             List<Object> list = (List<Object>) param;  
  60.             dbObject.put(varName, list);  
  61.         } else if (param instanceof Map) {  
  62.             Map<Object, Object> map = (Map<Object, Object>) param;  
  63.             dbObject.put(varName, map);  
  64.         }  
  65.         // 恢复访问控制权限  
  66.         field.setAccessible(accessFlag);  
  67.     }  
  68.     return dbObject;  
  69. }  

 

5.测试代码

[java]  view plain  copy
 
  1. package test;  
  2.   
  3. import java.lang.reflect.InvocationTargetException;  
  4. import java.util.ArrayList;  
  5. import java.util.HashMap;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import org.junit.Before;  
  10. import org.junit.Test;  
  11.   
  12. import com.mongodb.BasicDBObject;  
  13. import com.mongodb.DBObject;  
  14. import com.zmy.bean.Person;  
  15. import com.zmy.bean.Score;  
  16. import com.zmy.util.BeanUtil;  
  17. import com.zmy.util.DBObjectUtil;  
  18.   
  19. public class ConvertTest {  
  20.   
  21.     private Person person = null;  
  22.     private Map<String, Object> map = null;  
  23.       
  24.     @Before  
  25.     public void initBean(){  
  26.         person = new Person();  
  27.         Score score1 = new Score();  
  28.         Score score2 = new Score();  
  29.         person.setAddress("大连");  
  30.         person.setAge(21);  
  31.         person.setJob("coder");  
  32.         person.setName("zmy");  
  33.         List<String> schools = new ArrayList<String>();  
  34.         List<Score> scores = new ArrayList<Score>();  
  35.         schools.add("DLUT");  
  36.         score1.setCource_name("course1");  
  37.         score1.setCource_score(85);  
  38.         score2.setCource_name("course2");  
  39.         score2.setCource_score(80);  
  40.         scores.add(score1);  
  41.         scores.add(score2);  
  42.         person.setSchool(schools);  
  43.         person.setScore(scores);  
  44.     }  
  45.       
  46.     @Before  
  47.     public void initMap(){  
  48.         map = new HashMap<String, Object>();  
  49.         map.put("address""大连");  
  50.         map.put("name""zmy");  
  51.         map.put("job""coder");  
  52.         map.put("age"21);  
  53.         List<String> schools = new ArrayList<String>();  
  54.         schools.add("DLUT");  
  55.         schools.add("HUK");  
  56.         map.put("school", schools);  
  57.         List<Score> scores = new ArrayList<Score>();  
  58.         Score score1 = new Score();  
  59.         Score score2 = new Score();  
  60.         score1.setCource_name("course1");  
  61.         score1.setCource_score(85);  
  62.         score2.setCource_name("course2");  
  63.         score2.setCource_score(80);  
  64.         scores.add(score1);  
  65.         scores.add(score2);  
  66.         map.put("score", scores);  
  67.     }  
  68.       
  69.     @Test  
  70.     public void testBean2Map(){  
  71.         Map<String, Object> map = BeanUtil.transBean2Map(person);  
  72.         System.out.println(map.toString());  
  73.     }  
  74.       
  75.     @Test  
  76.     public void testMap2Bean(){  
  77.         Person person = (Person) BeanUtil.transMap2Bean(map, new Person());  
  78.         System.out.println(person.getName());  
  79.     }  
  80.       
  81.     @Test  
  82.     public void testBean2Json(){  
  83.         String json = BeanUtil.beanToJson(person);  
  84.         System.out.println(json);  
  85.           
  86.         Person person2 = BeanUtil.json2Bean(json, Person.class);  
  87.         System.out.println(person2.getName());  
  88.     }  
  89.       
  90.     @Test  
  91.     public void testDBObject2Bean(){  
  92.         DBObject dbObject = new BasicDBObject(map);  
  93.         try {  
  94.             Person p = BeanUtil.dbObject2Bean(dbObject, new Person());  
  95.             System.out.println(p.getName());  
  96.         } catch (IllegalAccessException | InvocationTargetException  
  97.                 | NoSuchMethodException e) {  
  98.             // TODO Auto-generated catch block  
  99.             e.printStackTrace();  
  100.             System.out.println("转换error!!!");  
  101.         }  
  102.           
  103.     }  
  104.       
  105.     @Test  
  106.     public void testBean2DBObject(){  
  107.         try {  
  108.             DBObject dbObject = DBObjectUtil.bean2DBObject(person);  
  109.             System.out.println(dbObject.get("score"));  
  110.             System.out.println(person.getScore());  
  111.         } catch (IllegalArgumentException | IllegalAccessException e) {  
  112.             // TODO Auto-generated catch block  
  113.             e.printStackTrace();  
  114.             System.out.println("转换error!!!");  
  115.         }  
  116.     }  
  117. }  

猜你喜欢

转载自paynexss.iteye.com/blog/2322486
今日推荐