/**

  1. * 将一个 JavaBean 对象转化为一个  Map
  2. * @param bean 要转化的JavaBean 对象
  3. * @return 转化出来的  Map 对象
  4. * @throws IntrospectionException 如果分析类属性失败
  5. * @throws IllegalAccessException 如果实例化 JavaBean 失败
  6. * @throws InvocationTargetException 如果调用属性的 setter 方法失败
  7. */
  8. @SuppressWarnings({ "rawtypes", "unchecked" })
  9. public static Map convertBean(Object bean)
  10. throws IntrospectionException, IllegalAccessException, InvocationTargetException {
  11. Class type = bean.getClass();
  12. Map returnMap = new HashMap();
  13. BeanInfo beanInfo = Introspector.getBeanInfo(type);
  14. PropertyDescriptor[] propertyDescriptors =  beanInfo.getPropertyDescriptors();
  15. for (int i = 0; i< propertyDescriptors.length; i++) {
  16. PropertyDescriptor descriptor = propertyDescriptors[i];
  17. String propertyName = descriptor.getName();
  18. if (!propertyName.equals("class")) {
  19. Method readMethod = descriptor.getReadMethod();
  20. Object result = readMethod.invoke(bean, new Object[0]);
  21. if (result != null) {
  22. returnMap.put(propertyName, result);
  23. } else {
  24. returnMap.put(propertyName, "");
  25. }
  26. }
  27. }
  28. return returnMap;
  29. }
  30. /**
  31. * 将一个 Map 对象转化为一个 JavaBean
  32. * @param type 要转化的类型
  33. * @param map 包含属性值的 map
  34. * @return 转化出来的 JavaBean 对象
  35. * @throws IntrospectionException 如果分析类属性失败
  36. * @throws IllegalAccessException 如果实例化 JavaBean 失败
  37. * @throws InstantiationException 如果实例化 JavaBean 失败
  38. * @throws InvocationTargetException 如果调用属性的 setter 方法失败
  39. */
  40. @SuppressWarnings("rawtypes")
  41. public static Object convertMap(Class type, Map map)
  42. throws IntrospectionException, IllegalAccessException,
  43. InstantiationException, InvocationTargetException {
  44. BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取类属性
  45. Object obj = type.newInstance(); // 创建 JavaBean 对象
  46. // 给 JavaBean 对象的属性赋值
  47. PropertyDescriptor[] propertyDescriptors =  beanInfo.getPropertyDescriptors();
  48. for (int i = 0; i< propertyDescriptors.length; i++) {
  49. PropertyDescriptor descriptor = propertyDescriptors[i];
  50. String propertyName = descriptor.getName();
  51. if (map.containsKey(propertyName)) {
  52. // 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。
  53. Object value = map.get(propertyName);
  54. Object[] args = new Object[1];
  55. args[0] = value;
  56. descriptor.getWriteMethod().invoke(obj, args);
  57. }
  58. }
  59. return obj;
  60. }

Java 中 Map与JavaBean实体类之间的相互转化的更多相关文章

  1. java中的xml与实体类之间的映射

    实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...

  2. java中map接口hashMap以及Enty之间的用法和关系

    java中map接口hashMap以及Enty之间的转换 首先说的是map接口: Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value ...

  3. java中的几种实体类对象(PO,VO,DAO,BO,POJO)

    一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象.使用Hibernate来生成PO是不错的选择. 二.VO :(value object) ...

  4. Java中接口与接口和类之间的关系

    接口和接口之间的关系 继承关系 可以多继承,并且可以多层继承 注意: 1.如果多个父接口中有同名的抽象方法,那么子接口只需要实现一次即可 2.如果多个父接口中有同名的默认方法,那么子接口必须重写默认方 ...

  5. [Unity]C#中 将XML和实体类之间进行相互转换的工具类

    using System; using System.Xml; using System.Xml.Serialization; using System.IO; namespace LOTool { ...

  6. java 项目中几种O实体类的概念

    经常会接触到vo,do,dto的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析. 得出的主要结论是:在项目应用中,vo对应于页面上需要显示的数据(表单),do对应 ...

  7. javabean实体类对象转为Map类型对象的方法(转发)

    //将javabean实体类转为map类型,然后返回一个map类型的值 public static Map<String, Object> beanToMap(Object obj) { ...

  8. 探究Java中Map类

    Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象.       Map的接口       Map---实现Map       Map.Entry--Map的内部 ...

  9. 将java中Map对象转为有相同属性的类对象(json作为中间转换)

    java中Map对象转为有相同属性的类对象(json作为中间转换) 准备好json转换工具类 public class JsonUtil { private static ObjectMapper o ...

随机推荐

  1. css3实现3d显示效果

    <!doctype html><html><head>    <meta charset="UTF-8">    <meta ...

  2. #include<algorithm>里的函数

    #include<algorithm>里的函数   #include<algorithm>     非修改性序列操作(12个)   循环 对序列中的每个元素执行某操作 for_ ...

  3. range() 函数详解 python

    使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节.这里记录一下range(),复习下list的slide,最后分析一个好玩儿的冒泡程序. 这里记 ...

  4. elasticsearch的python增删查改实例分析

    Reference:  http://bigg.top/2015/11/29/elasticsearch%E7%9A%84python%E5%A2%9E%E5%88%A0%E6%9F%A5%E6%94 ...

  5. iOSGCD的使用以及死锁的问题

    死锁一直都是在使用多线程时,需要注意的一个问题.以前对同步.异步,串行.并行只有一个模糊的概念,想想也是时候整理一下了.再看看之前的博客,已经很久没有干货了[说得好像之前有干货一样],所以,这篇博客, ...

  6. json demo

    package my.bigdata.movieTask.action; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.J ...

  7. linux下ppp拨号无线上网

    linux下用ppp上网需要两个程序:pppd和chat.ubuntu自带pppd和chat,可以使用man查看具体使用方法. 典型的ppp拨号需要准备几个文件: 1. pppd脚本. 2. chat ...

  8. [LintCode]各位相加

    描述: 给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数. 给出 num = 38. 相加的过程如下:3 + 8 = 11,1 + 1 = 2.因为 2 只剩下一个数字,所 ...

  9. file文件与base64字符串的相互转换

    今天心情不好,不想说话. /** * 文件转base64字符串 * @param file * @return */ public static String fileToBase64(File fi ...

  10. 《FPGA全程进阶---实战演练》第二章之焊接板子及调试注意事项

    1.若是读者第一次做板子,强烈建议画完PCB板后将PCB图打印出来,然后对照你买的芯片将芯片放置对 应的位置,然后查看所有的封装格式适不适合,否则等你做出板子来后再试,为时晚矣.笔者虽然知道要这么 做 ...