JavaBean与Map相互转换
为什么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相互转换相关推荐
- javabean与map的转换
2019独角兽企业重金招聘Python工程师标准>>> javabean与map的转换有很多种方式,比如: 1.通过ObjectMapper先将bean转换为json,再将json转 ...
- 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 ...
- jsonArray:JavaBean,List,Map转成json格式(轉+整理)
JSON与JAVA数据的转换 JavaBean,List,Map转成json格式 JS解析json数据(如何将json字符串转化为数组) 需要四個包: commons-beanutils-1.8.3. ...
- javaBean List Map json(转)
1.依赖的包 根据:http://json-lib.sourceforge.net/ 可见json-lib使用需要依赖一下包: 下载地址:http://download.csdn.net/downlo ...
- JavaBean与Map互转
在实际开发过程中,经常碰到需要进行对象与map之间互转的问题,其实对于对象.Map 之间进行互转有很多种方式,下面我们一起来梳理一下: 利用 JSON 工具包,将对象转成字符串,之后再转成 Map,这 ...
- Java中Array、List、Map相互转换
引言: 在实际项目开发中或者一些算法面试题目中经常需要用到Java中这三种类型的相互转换,比如对于一个整型数组中寻找一个整数与所给的一个整数值相同,正常情况下第一反应会想到用for循环直接遍历这个数组 ...
- JavaBean,List,Map转成json格式
Java代码 public class User { private String username; private String password; public String getUser ...
- 微信XML,Object,MAP相互转换
2019独角兽企业重金招聘Python工程师标准>>> pom.xml <dependency><groupId>com.thoughtworks.xstre ...
- 一文教你json字符串与JavaBean对象如何相互转换
工作中经常会遇到在复杂的业务场景中,将数据持久化时某个字段存储的是json字符串,取出数据进行操作时,不能直接对json字符串进行操作,能操作的是JavaBean对象. 或者调用其他的服务(Java应 ...
最新文章
- Java多线程的同步机制(synchronized)
- 浅谈敏捷开发及Scrum工具leangoo(三)
- 从命令行传递其他变量来制作
- OpenCV 使用方向梯度直方图估计图像旋转角度
- 向上取整的方法_瓷砖测量的方法有哪些?瓷砖尺寸一般是多少?
- map初始化_您可曾这样初始化一个map呢?
- 机器学习的练功心法(三)——特征工程
- CNN经典模型:VGGNet
- win10必须禁用的服务_Win10系统中这3个无用的设置,奉劝你还是早点关闭吧
- 网络字节序与主机字节序 高低位
- 最新 Axure 激活码
- 网页数据提取----网络投票软件开发
- 清华大学两名博士生被开除:你不吃学习的苦,就要吃生活的苦
- 【unity】FPS快速实现全息瞄准镜
- macos支持exfat吗_在移动硬盘中安装win10和macos双系统
- jcyzoj1505: 原地tp
- 把已有普通文件夹变成git仓库以及git常用命令的使用
- java大小写敏感_Java是大小写敏感的语言。
- simple_bypass
- 【免费开放源码】审批类小程序项目实战(活动历史页面)
热门文章
- DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了
- 如何根据参数类型重载__init__方法?
- ASP.NET MVC 3 - 部分vs显示模板与编辑器模板
- 如何在C#中获取Unix时间戳
- 在Python中将十六进制字符串转换为int
- JAVA调用Web Service接口的五种方式
- 登录 java_登录Java
- win11系统txt文件怎么加密 windows11txt文件加密的解决方法
- MultiActionController
- 计算机一级信息技术基础知识,计算机一级考试之信息技术基础.doc