为什么80%的码农都做不了架构师?>>>   

package com.tzj.utils;import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class BeanToMapUtils {private final static Logger logger = LoggerFactory.getLogger(BeanToMapUtils.class);/*** 将一个 Map 对象转化为一个 JavaBean* * @param type*            要转化的类型* @param map*            包含属性值的 map* @return 转化出来的 JavaBean 对象* @throws IntrospectionException*             如果分析类属性失败* @throws IllegalAccessException*             如果实例化 JavaBean 失败* @throws InstantiationException*             如果实例化 JavaBean 失败* @throws InvocationTargetException*             如果调用属性的 setter 方法失败*/public static Object convertMap(Class<?> type, Map<?, ?> map) {BeanInfo beanInfo = null;try {beanInfo = Introspector.getBeanInfo(type);} catch (IntrospectionException e) {logger.error("分析类属性失败");e.printStackTrace();} // 获取类属性Object obj = null;try { // 创建 JavaBean 对象obj = type.newInstance();} catch (InstantiationException | IllegalAccessException e) {logger.error("实例化 JavaBean 失败");e.printStackTrace();}// 给 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;try {descriptor.getWriteMethod().invoke(obj, args);} catch (IllegalAccessException | IllegalArgumentException e) {logger.error("实例化 JavaBean 失败");e.printStackTrace();} catch (InvocationTargetException e) {logger.error("调用属性的 setter 方法失败");e.printStackTrace();}}}return obj;}/*** 将一个 JavaBean 对象转化为一个 Map* * @param bean*            要转化的JavaBean 对象* @return 转化出来的 Map 对象* @throws IntrospectionException*             如果分析类属性失败* @throws IllegalAccessException*             如果实例化 JavaBean 失败* @throws InvocationTargetException*             如果调用属性的 setter 方法失败*/public static Map<String, Object> convertBean(Object bean) {Class<? extends Object> type = bean.getClass();Map<String, Object> returnMap = new HashMap<String, Object>();BeanInfo beanInfo = null;try {beanInfo = Introspector.getBeanInfo(type);} catch (IntrospectionException e) {logger.error("分析类属性失败");e.printStackTrace();return returnMap;}PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();for (PropertyDescriptor descriptor : propertyDescriptors) {String propertyName = descriptor.getName();if (!propertyName.equals("class")) {Method readMethod = descriptor.getReadMethod();System.err.println(propertyName);Object result = null;try {result = readMethod.invoke(bean, new Object[0]);} catch (IllegalAccessException | IllegalArgumentException e) {logger.error("实例化 JavaBean 失败");e.printStackTrace();} catch (InvocationTargetException e) {logger.error("调用属性的 setter 方法");e.printStackTrace();}if (propertyName.equals("entity") && result != null) {returnMap.putAll(convertBean(result));} else {returnMap.put(propertyName, result);}}}return returnMap;}
}

转载于:https://my.oschina.net/sodeve/blog/533933

JavaBean与Map相互转换相关推荐

  1. javabean与map的转换

    2019独角兽企业重金招聘Python工程师标准>>> javabean与map的转换有很多种方式,比如: 1.通过ObjectMapper先将bean转换为json,再将json转 ...

  2. json map java_Java:JSON和Map相互转换

    Java:JSON与Map相互转换 需要jar包:jackson-core-2.6.0.jar,jackson-databind-2.6.0.jar,jackson-annotations-2.6.0 ...

  3. jsonArray:JavaBean,List,Map转成json格式(轉+整理)

    JSON与JAVA数据的转换 JavaBean,List,Map转成json格式 JS解析json数据(如何将json字符串转化为数组) 需要四個包: commons-beanutils-1.8.3. ...

  4. javaBean List Map json(转)

    1.依赖的包 根据:http://json-lib.sourceforge.net/ 可见json-lib使用需要依赖一下包: 下载地址:http://download.csdn.net/downlo ...

  5. JavaBean与Map互转

    在实际开发过程中,经常碰到需要进行对象与map之间互转的问题,其实对于对象.Map 之间进行互转有很多种方式,下面我们一起来梳理一下: 利用 JSON 工具包,将对象转成字符串,之后再转成 Map,这 ...

  6. Java中Array、List、Map相互转换

    引言: 在实际项目开发中或者一些算法面试题目中经常需要用到Java中这三种类型的相互转换,比如对于一个整型数组中寻找一个整数与所给的一个整数值相同,正常情况下第一反应会想到用for循环直接遍历这个数组 ...

  7. JavaBean,List,Map转成json格式

    Java代码   public class User { private String username; private String password; public String getUser ...

  8. 微信XML,Object,MAP相互转换

    2019独角兽企业重金招聘Python工程师标准>>> pom.xml <dependency><groupId>com.thoughtworks.xstre ...

  9. 一文教你json字符串与JavaBean对象如何相互转换

    工作中经常会遇到在复杂的业务场景中,将数据持久化时某个字段存储的是json字符串,取出数据进行操作时,不能直接对json字符串进行操作,能操作的是JavaBean对象. 或者调用其他的服务(Java应 ...

最新文章

  1. Mobileye独创性创新
  2. 设计模式(一) 策略模式
  3. 超优 Vue+Element+Spring 中后端解决方案
  4. XV6操作系统代码阅读心得(二):进程
  5. mysql 连续签到天数_签到功能实现,没有你想的那么复杂(一)
  6. linux poll函数 实现,Linux select/poll/epoll 原理(一)实现基础
  7. 使用idea把Svn分支合并到主干上
  8. 2015.11-12 maxon电机接线——调试——控制
  9. linux计划任务详解(附演示)
  10. python修改像素
  11. P4199-FFT,manacher
  12. AAU,BBU,RRU区分与功能
  13. 当读/写磁盘文件时,read/write是不带缓冲机制的吗?请说明原因。
  14. 家用计算机手抄报,大学计算机作业手抄报
  15. java多态app_【Java基础】Java中的多态
  16. java html模板隐情mini,HTML A标签简单问题
  17. 1.3 OC与OD门(硬件基础系列)
  18. Java实现 洛谷 P1010 幂次方
  19. [笔记]-后端学习笔记
  20. 前端性能优化篇——DNS/CDN

热门文章

  1. RpcException:No provider available for remote service异常
  2. mysql安装服务和安装中常见问题install/Remove of the Service Denied与net start mysql服务启动失败解决方法
  3. scrapy爬虫学习系列七:scrapy常见问题解决方案
  4. 解决IDEA中Maven加载依赖包慢的问题
  5. SpringBoot2.X + SpringCache + redis解决乱码问题
  6. 在razor视图引擎中转义@字符
  7. linux 远程 mysql,linux下mysql远程访问
  8. win11组策略如何恢复默认设置 windows11组策略恢复默认设置的步骤方法
  9. win10系统电脑c盘哪些文件可以删除,c盘可以删除的文件有哪些
  10. Activiti(6.0)任务管理服务TaskaskService