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应 ...
最新文章
- Mobileye独创性创新
- 设计模式(一) 策略模式
- 超优 Vue+Element+Spring 中后端解决方案
- XV6操作系统代码阅读心得(二):进程
- mysql 连续签到天数_签到功能实现,没有你想的那么复杂(一)
- linux poll函数 实现,Linux select/poll/epoll 原理(一)实现基础
- 使用idea把Svn分支合并到主干上
- 2015.11-12 maxon电机接线——调试——控制
- linux计划任务详解(附演示)
- python修改像素
- P4199-FFT,manacher
- AAU,BBU,RRU区分与功能
- 当读/写磁盘文件时,read/write是不带缓冲机制的吗?请说明原因。
- 家用计算机手抄报,大学计算机作业手抄报
- java多态app_【Java基础】Java中的多态
- java html模板隐情mini,HTML A标签简单问题
- 1.3 OC与OD门(硬件基础系列)
- Java实现 洛谷 P1010 幂次方
- [笔记]-后端学习笔记
- 前端性能优化篇——DNS/CDN
热门文章
- RpcException:No provider available for remote service异常
- mysql安装服务和安装中常见问题install/Remove of the Service Denied与net start mysql服务启动失败解决方法
- scrapy爬虫学习系列七:scrapy常见问题解决方案
- 解决IDEA中Maven加载依赖包慢的问题
- SpringBoot2.X + SpringCache + redis解决乱码问题
- 在razor视图引擎中转义@字符
- linux 远程 mysql,linux下mysql远程访问
- win11组策略如何恢复默认设置 windows11组策略恢复默认设置的步骤方法
- win10系统电脑c盘哪些文件可以删除,c盘可以删除的文件有哪些
- Activiti(6.0)任务管理服务TaskaskService