反射方式 Map转换obj对象

最近接到的需求是这样的,要求我根据一个关联id获取不同数据表的数据,并返回List集合。
我接到这个需求最初想法就是通过mabatis首先获取List<Map<String, Object>>返回值集合; 然后在根据表名称就可以得知实体类对象了,再通过反射的方式进行将map转换为obj。可能有人问我为什么这么转,因为已经获取到了map集合了。在这里我说一下,虽然我获取到了集合但是调用这个接口的开发人员就难受了,因为首先map中的key都是数据库表字段,那相应的开发人员就要通过反射的方式进行获取表字段了,为了方便他人我就在我这里全部都做了,调用方只需要根据实体类强转就可以了。

代码


public static List<Object> mapToObject(List<Map<String, Object>> map,Class<?> clz){List<Object> list = new ArrayList<>();map.stream().forEach(el-> {Object obj = null;try {obj = clz.newInstance();Field[] fields = obj.getClass().getDeclaredFields();for (Field field: fields){int mod = field.getModifiers();if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){continue;}field.setAccessible(true);Column presentColumn;String columnName;//判断是否被column注解修饰,获取name属性值if(field.isAnnotationPresent(Column.class)){presentColumn = field.getDeclaredAnnotation(Column.class);columnName = presentColumn.name();columnName = columnName.replace("`","");field.set(obj, el.get(columnName));}}list.add(obj);} catch (Exception e) {e.printStackTrace();}});return list;}

说明一下,这个是我再工具类种定义的转换方法。其实思路很简单,就是首先获取反射对象,获取字段,此处说明一下,getFields()是获取所有public修饰的字段,但是正常开发种,字段都是private pri修饰的,所以getDeclaredFields通过该方法获取字段。然后判断是否被static 或者final修饰,然后获取所有被@Column注解修饰的字段,获取column的name属性值,最后进行赋值操作,最后返回List对象。

{[{"id": "00aa6f24ce5c4972b17aa8e49b354435","prjViewId": "96f11d75cb61474483b847637a003b81","showOrder": 99,"datavalue": "0","rowIndex": "13","colIndex": "9","mergeRowCount": "0","mergeColCount": "0","type": "估算"},{"id": "0115d958826e40e88e913a898ac5c084","prjViewId": "96f11d75cb61474483b847637a003b81","showOrder": 95,"datavalue": "t","rowIndex": "13","colIndex": "5","mergeRowCount": "0","mergeColCount": "0","type": "估算"} ]

总结

一个小白的开发经验,本文仅仅是自己用作以后经验和技术提升的笔记,请勿喷,如果有更好的想法,希望可以分享一下,谢谢。

反射方式 Map转换obj对象相关推荐

  1. 自动将Map转换成对象的方法

    实现自动将Map转换成对象,借助第三方工具commons-beanutils-1.8.0.jar+commons-logging.jar实现,需要遵守的规则创建的对象的属性名必须与map的key相同. ...

  2. MapStruct Map 转换成对象

    背景 调用公司影像识别服务接口,返回值都是 Map<String,Object>类型,有的key很多.想把这种 map 结果转为项目中对应的JavaBean如DTO 或者 VO,又不想写很 ...

  3. java web 的map_javaweb开发过程中小工具系列之将Map转换成对象

    在javaweb项目的开发过程中,经常遇到要将一个Map集合转换成一个javabean对象,比如说将页面提交的数据封装到一个javabean中. 此小工具需要两个jar包 1:commons-bean ...

  4. JAVA中map转换成实体对象

    /** @ClassName:QueryVOToBeanUtil @author: 短笛吟风 @description:TODO @createDate: 2020/2/18 @version: 1. ...

  5. [转]jackson json字符串、map、java对象的转换例子

    ackson框架 json字符串.map.java对象的转换例子 先下载框架jar包: 下面是一些例子: package jackson; import java.io.File; import ja ...

  6. Flutter实战——Map Json Object对象转换

    最近在写Flutter代码,发现iOS侧使用的是字典类型(Map),而我们Android使用的是对象类型. 数据类型完全不同,这可咋整? 于是研究了一下Map相关的Json转换,希望能帮助到大家 本篇 ...

  7. js 中动态添加成员对象与数组或map转换(成员字段含有.)

    var obj = {}; key="pram" value="test" obj[key] = value;  => obj = {pram: &quo ...

  8. java反射实现自定义json转对象方法-忽略字段大小写、字段个数

    java反射实现自定义json转对象方法-忽略字段大小写.字段个数 开发过程中经常会遇到json转对象,可以使用FastJson或者Gson自带的工具类进行转换,但当遇到json与对象属性名称大小写不 ...

  9. java 把map转换成json_map转换成JSON的3种方法

    1 json-lib net.sf.json-lib json-lib 2.4 jdk15 import java.util.HashMap; import java.util.Map; import ...

最新文章

  1. 我们从产品团队扩大中学到了什么
  2. linux达人养成计划学习笔记(四)—— 压缩命令
  3. lnmp 中的laravel出现白屏的处理办法
  4. Qt -- 非常详细的pro文件的语法说明
  5. 通电就可以工作,这些单片机真香!
  6. 捕获Java堆转储的7个选项
  7. sqlserver2005仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'SendMealAddress'中为标识列指定显式值。...
  8. 使用 Django 的日志模块,同时发送错误邮件到163邮箱
  9. linux安装lrzsz工具
  10. 虚拟光驱DAEMONTools 3.47特别版/汇编版/珍藏版
  11. 电脑开机加速,一下子就提升了20几秒
  12. clickhouse之数据存储:JBOD vs RAID
  13. 计算机组成原理超详解
  14. TVS相关参数与选型
  15. 信息学奥赛与大学计算机课程,信息学是什么课程
  16. PCB设计中如何区分 滤波电容、去耦电容、旁路电容
  17. 简报a4纸的html页面,简报模板
  18. 苹果8plus什么用计算机,iphone8plus怎么把手机投屏到电脑显示器
  19. 华为小世界杯来了:从一棵树到一片森林的大赛
  20. Windows下Latex的系统路径增添,使用命令编译

热门文章

  1. 解决win11系统任务栏(通知区域)蓝牙图标不显示问题
  2. [精简]托福核心词汇96
  3. MM物料主数据的字段解释
  4. 【华为OD机试真题 Java】硬件产品销售方案
  5. 雷丁CAN通讯信号上位机,比德文,宝路达,看通讯报文,查故障 ,非常方便实用。
  6. 通过冒泡排序对一个数组进行升序排序
  7. 综合管廊智慧运维管理平台应用研究
  8. javascript非JSON字符串转成对象
  9. linux中top指令,Linux下top命令详解
  10. iPhone14Pro热销,但iPhone整体销量或下滑,库克的图谋失败了