欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Javabean和map相互转化方法代码示例

程序员文章站 2024-02-29 15:57:04
在做导入的时候,遇到了需要将map对象转化 成javabean的问题,也就是说,不清楚javabean的内部字段排列,只知道map的 key代表javabean的字段名,v...

在做导入的时候,遇到了需要将map对象转化 成javabean的问题,也就是说,不清楚javabean的内部字段排列,只知道map的 key代表javabean的字段名,value代表值。

那现在就需要用转化工具了。是通用的哦!

首先来看 javabean 转化成map的方法:

[java] 
/**
   * 将一个 javabean 对象转化为一个 map
   * @param bean 要转化的javabean 对象
   * @return 转化出来的 map 对象
   * @throws introspectionexception 如果分析类属性失败
   * @throws illegalaccessexception 如果实例化 javabean 失败
   * @throws invocationtargetexception 如果调用属性的 setter 方法失败
   */ 
  @suppresswarnings({ "rawtypes", "unchecked" }) 
  public static map convertbean(object bean) 
      throws introspectionexception, illegalaccessexception, invocationtargetexception { 
    class type = bean.getclass(); 
    map returnmap = new hashmap(); 
    beaninfo 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 = readmethod.invoke(bean, new object[0]); 
        if (result != null) { 
          returnmap.put(propertyname, result); 
        } else { 
          returnmap.put(propertyname, ""); 
        } 
      } 
    } 
    return returnmap; 
  } 

下面是将map转化成javabean对象的方法:

[java] 
/**
   * 将一个 map 对象转化为一个 javabean
   * @param type 要转化的类型
   * @param map 包含属性值的 map
   * @return 转化出来的 javabean 对象
   * @throws introspectionexception 如果分析类属性失败
   * @throws illegalaccessexception 如果实例化 javabean 失败
   * @throws instantiationexception 如果实例化 javabean 失败
   * @throws invocationtargetexception 如果调用属性的 setter 方法失败
   */ 
  @suppresswarnings("rawtypes") 
  public static object convertmap(class type, map map) 
      throws introspectionexception, illegalaccessexception, 
      instantiationexception, invocationtargetexception { 
    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; 
  } 

以上内容我测试过,是没有问题的,供大家参考学习。感谢大家对本站的支持。