为什么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. Java多线程的同步机制(synchronized)
  2. 浅谈敏捷开发及Scrum工具leangoo(三)
  3. 从命令行传递其他变量来制作
  4. OpenCV 使用方向梯度直方图估计图像旋转角度
  5. 向上取整的方法_瓷砖测量的方法有哪些?瓷砖尺寸一般是多少?
  6. map初始化_您可曾这样初始化一个map呢?
  7. 机器学习的练功心法(三)——特征工程
  8. CNN经典模型:VGGNet
  9. win10必须禁用的服务_Win10系统中这3个无用的设置,奉劝你还是早点关闭吧
  10. 网络字节序与主机字节序 高低位
  11. 最新 Axure 激活码
  12. 网页数据提取----网络投票软件开发
  13. 清华大学两名博士生被开除:你不吃学习的苦,就要吃生活的苦
  14. 【unity】FPS快速实现全息瞄准镜
  15. macos支持exfat吗_在移动硬盘中安装win10和macos双系统
  16. jcyzoj1505: 原地tp
  17. 把已有普通文件夹变成git仓库以及git常用命令的使用
  18. java大小写敏感_Java是大小写敏感的语言。
  19. simple_bypass
  20. 【免费开放源码】审批类小程序项目实战(活动历史页面)

热门文章

  1. DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了
  2. 如何根据参数类型重载__init__方法?
  3. ASP.NET MVC 3 - 部分vs显示模板与编辑器模板
  4. 如何在C#中获取Unix时间戳
  5. 在Python中将十六进制字符串转换为int
  6. JAVA调用Web Service接口的五种方式
  7. 登录 java_登录Java
  8. win11系统txt文件怎么加密 windows11txt文件加密的解决方法
  9. MultiActionController
  10. 计算机一级信息技术基础知识,计算机一级考试之信息技术基础.doc