https://meilishiyan-song.taobao.com/

javabean与map互转

 /**
     * 将一个 JavaBean 对象转化为一个  Map
     * @param bean 要转化的JavaBean 对象
     * @return 转化出来的  Map 对象
  * @throws Exception
     */

    public static Map convertBean(Object bean){
      Map returnMap = new HashMap();
     if(bean==null){
      return returnMap;
     }
        Class type = bean.getClass();
      
        BeanInfo beanInfo;
  try {
   beanInfo = Introspector.getBeanInfo(type);
   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 = null;
     try {
      result = readMethod.invoke(bean, new Object[0]);
     } catch (Exception e) {
      //DevLog.error(type.getName() + "转换成Map出错,方法:" + readMethod.getName(), e);
     }
                 if (result != null) {
                     returnMap.put(propertyName, result);
                 } else {
                     returnMap.put(propertyName, "");
                 }
             }
         }
  } catch (IntrospectionException e1) {
   DevLog.error(type.getName() + "转换成Map出错:", e1);
  }
       
        return returnMap;
    }

   /**
     * 将一个 Map 对象转化为一个 JavaBean
     * @param type 要转化的类型
     * @param map 包含属性值的 map
     * @return 转化出来的 JavaBean 对象
     * @throws Exception
     */

   public static Object convertMap(Class type, Map map) throws Exception {                 BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取类属性             Object obj = type.newInstance(); // 创建 JavaBean 对象

        // 给 JavaBean 对象的属性赋值         PropertyDescriptor[] propertyDescriptors =  beanInfo.getPropertyDescriptors();         for (int i = 0; i< propertyDescriptors.length; i++) {             PropertyDescriptor descriptor = propertyDescriptors[i];             String propertyName = descriptor.getName();             if (map.containsKey(propertyName)) {                

      // 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。                 Object value = map.get(propertyName);              

               Object[] args = new Object[1];               

      args[0] = value;                

    descriptor.getWriteMethod().invoke(obj, args);           

  }        

}         return obj;

    }

 

posted @ 2016-11-11 12:57  望梦圆  阅读(726)  评论(0编辑  收藏  举报
https://meilishiyan-song.taobao.com/