Map对象与JavaBean互转,List<Map>与List<JavaBean>互转等
2016-03-27 22:32
627 查看
直接上代码。
下面的将map转为JavaBean用到了泛型,适应性更强。
将JavaBean转为map对象还未做优化。
第三个方法和第四个方法是对前两个方法的升级。
下面的将map转为JavaBean用到了泛型,适应性更强。
将JavaBean转为map对象还未做优化。
第三个方法和第四个方法是对前两个方法的升级。
//关键包引用列举一下 import com.sun.org.apache.commons.beanutils.BeanUtils; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; /** * 将 Map对象转化为JavaBean 此方法已经测试通过 * @author wyply115 * @param type 要转化的类型 * @param map * @return Object对象 * @version 2016年3月20日 11:03:01 */ public static <T> T convertMap2Bean(Map map, Class T) throws Exception { if(map==null || map.size()==0){ return null; } BeanInfo beanInfo = Introspector.getBeanInfo(T); T bean = (T)T.newInstance(); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (int i = 0, n = propertyDescriptors.length; i <n ; i++) { PropertyDescriptor descriptor = propertyDescriptors[i]; String propertyName = descriptor.getName(); String upperPropertyName = propertyName.toUpperCase(); if (map.containsKey(upperPropertyName)) { Object value = map.get(upperPropertyName); //这个方法不会报参数类型不匹配的错误。 BeanUtils.copyProperty(bean, propertyName, value); //用这个方法对int等类型会报参数类型不匹配错误,需要我们手动判断类型进行转换,比较麻烦。 //descriptor.getWriteMethod().invoke(bean, value); //用这个方法对时间等类型会报参数类型不匹配错误,也需要我们手动判断类型进行转换,比较麻烦。 //BeanUtils.setProperty(bean, propertyName, value); } } return bean; } /** * 将 JavaBean对象转化为 Map 此方法未测试 * @author wyply115 * @param bean 要转化的类型 * @return Map对象 * @version 2016年3月20日 11:03:01 */ public static Map convertBean2Map(Object bean) throws Exception { Class type = bean.getClass(); Map returnMap = new HashMap(); BeanInfo beanInfo = Introspector.getBeanInfo(type); PropertyDescriptor[] propertyDescriptors = beanInfo .getPropertyDescriptors(); for (int i = 0, n = propertyDescriptors.length; i <n ; 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; } /** * 将 List<Map>对象转化为List<JavaBean> 此方法已通过测试 * @author wyply115 * @param type 要转化的类型 * @param map * @return Object对象 * @version 2016年3月20日 11:03:01 */ public static <T> List<T> convertListMap2ListBean(List<Map<String,Object>> listMap, Class T) throws Exception { List<T> beanList = new ArrayList<T>(); for(int i=0, n=listMap.size(); i<n; i++){ Map<String,Object> map = listMap.get(i); T bean = convertMap2Bean(map,T); beanList.add(bean); } return beanList; } /** * 将 List<JavaBean>对象转化为List<Map> * @author wyply115 * @param type 要转化的类型 * @param map * @return Object对象 * @version 2016年3月20日 11:03:01 */ public static List<Map<String,Object>> convertListBean2ListMap(List<Object> beanList) throws Exception { List<Map<String,Object>> mapList = new ArrayList<Map<String,Object>>(); for(int i=0, n=beanList.size(); i<n; i++){ Object bean = beanList.get(i); Map map = convertBean2Map(bean); mapList.add(map); } return mapList; }
相关文章推荐
- maven--初见
- 20145222黄亚奇《Java程序设计》第4周学习总结
- 20145239杜文超 《Java程序设计》第4周学习总结
- 正式开始重新学习java
- JAVA第二次作业
- Spring配置文件写法
- 如何解决Android在eclipse中项目同时使用viewpagerindicator,slidingmenu开源框架时项目报错的问题
- 几句话弄清楚Java参数传值还是传引用
- 20145206邹京儒《Java程序设计》第4周学习总结
- java int与integer的区别
- spring mvc 小结-51cto学院Spring MVC
- Java两个线程交替打印(实现Runnable接口)
- JAVAEE 框架 2016-3-27
- hibernate笔记
- [leetcode-337]House Robber III(java)
- 20145302张薇《Java程序设计》第四周学习总结
- 二叉搜索树与双向链表(java版)
- 《Java程序设计》第四周学习总结
- spring MVC 导出excel
- 前端控制器模式在springmvc的应用