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

 更新时间:2021年01月07日 10:36:04   作者:chenxuejiakaren  
这篇文章主要介绍了Javabean和map相互转化方法示例,介绍了其通用方法代码,需要的朋友可以参考下。

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

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

首先来看 JavaBean 转化成Map的方法:

/**
  * 将一个 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对象的方法:

/**
  * 将一个 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; 
 } 

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

相关文章

  • java如何连接数据库executeUpdate()和executeQuery()

    java如何连接数据库executeUpdate()和executeQuery()

    这篇文章主要介绍了java如何连接数据库executeUpdate()和executeQuery(),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 基于Zookeeper实现分布式锁详解

    基于Zookeeper实现分布式锁详解

    Zookeeper是一个分布式的,开源的分布式应用程序协调服务,是Hadoop和hbase的重要组件。这篇文章主要介绍了通过Zookeeper实现分布式锁,感兴趣的朋友可以了解一下
    2021-12-12
  • Java 流的高级使用之收集数据解析

    Java 流的高级使用之收集数据解析

    这篇文章主要介绍了Java 流的高级使用之收集数据解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Eclipse创建java程序可执行jar包教程

    Eclipse创建java程序可执行jar包教程

    这篇文章主要为大家分享了Eclipse创建java程序可执行jar包教程,具有一定的实用性和参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Mybatis的Mapper中的方法为什么不能重载

    Mybatis的Mapper中的方法为什么不能重载

    这篇文章主要介绍了Mybatis的Mapper中的方法为什么不能重载,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Quarkus中filter过滤器跨域cors问题解决方案

    Quarkus中filter过滤器跨域cors问题解决方案

    这篇文章主要为大家介绍了Quarkus中filter过滤器跨域cors问题的解决方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-02-02
  • springboot如何获取文件流

    springboot如何获取文件流

    这篇文章主要介绍了springboot如何获取文件流,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Spring AOP核心功能示例代码详解

    Spring AOP核心功能示例代码详解

    AOP面向切面编程,它是一种思想,它是对某一类事情的集中处理,而AOP是一种思想,而Spring AOP是一个框架,提供了一种对AOP思想的实现,它们的关系和loC与DI类似,这篇文章主要介绍了Spring AOP统一功能处理示例代码,需要的朋友可以参考下
    2023-02-02
  • java线程池详解及代码介绍

    java线程池详解及代码介绍

    这篇文章主要介绍了java中线程池的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • Springboot消除switch-case过程解析

    Springboot消除switch-case过程解析

    这篇文章主要介绍了Springboot消除switch-case过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论