码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java 获取类中所有字段 转换为 json字符串 Java 类中字段转换为json字符串 javabean 字段 转换为 jsonStr


    Java 获取类中所有字段 转换为 json字符串 Java 类中字段转换为json字符串 javabean 字段 转换为 jsonStr

    一、概述

            最近开发工作中,需要将类中的所有字段获取出来,并转换为json字符串,予以存储起来,用于poi excel导出,可以根据实际需要,增、减字段,来调整导出列的需求。 本文将 使用 反射的方式,获取类中的字段,存储到map中,再使用Fastjson转换为json字符串,用于输出存储。

    二、代码实现

            1、依赖 pom

    1. <dependency>
    2. <groupId>com.alibabagroupId>
    3. <artifactId>fastjsonartifactId>
    4. <version>1.2.83version>
    5. dependency>
    6. <dependency>
    7. <groupId>io.springfoxgroupId>
    8. <artifactId>springfox-swagger2artifactId>
    9. <version>2.9.2version>
    10. dependency>
    11. <dependency>
    12. <groupId>io.springfoxgroupId>
    13. <artifactId>springfox-swagger-uiartifactId>
    14. <version>2.9.2version>
    15. dependency>

            2、代码

    1. /**
    2. * Description: 生成类的字段 映射 map
    3. * @param clz 转换类的 class 对象
    4. * @param excludeList 排除的字段名
    5. * @param clzAnon 注解名 --- 用于字段 注释信息获取
    6. * @return java.util.List>
    7. * @version v1.0
    8. * @author wu
    9. * @date 2022/9/26 21:04
    10. */
    11. public List> getPropertyMap(Class clz, List excludeList, Class clzAnon) {
    12. List fieldList = Arrays.stream(clz.getDeclaredFields()).collect(Collectors.toList());
    13. List> mapList = Lists.newArrayList();
    14. int n = 1;
    15. for (Field f : fieldList) {
    16. String name = f.getName();
    17. if (CollectionUtils.isNotEmpty(excludeList)) {
    18. if (excludeList.contains(name)) continue;
    19. }
    20. HashMap tempMap = Maps.newHashMap();
    21. Annotation annotation = f.getAnnotation(clzAnon);
    22. String colName = name;
    23. if (annotation instanceof ApiModelProperty) {
    24. ApiModelProperty a = (ApiModelProperty) annotation;
    25. colName = a.value();
    26. }
    27. // add more Annotation support ...
    28. tempMap.put("colIndex", "" + n ++);
    29. tempMap.put("colName", colName);
    30. tempMap.put("property", name);
    31. mapList.add(tempMap);
    32. }
    33. return mapList;
    34. }

            3、测试

    1. @Test
    2. public void genPropertyMap(){
    3. ArrayList list = Lists.newArrayList();
    4. list.add("num22"); // 过滤掉属性num22
    5. List> propertyMap = getPropertyMap(Child.class, list, ApiModelProperty.class);
    6. System.out.println("propertyMap: \n"+ JSON.toJSONString(propertyMap));
    7. }

            3.1、输出结果如下:

    1. propertyMap:
    2. [
    3. {
    4. "colIndex": "1",
    5. "colName": "id2号",
    6. "property": "id22"
    7. },
    8. {
    9. "colIndex": "2",
    10. "colName": "名字2号",
    11. "property": "name22"
    12. },
    13. {
    14. "colIndex": "3",
    15. "colName": "地址2号",
    16. "property": "addr22"
    17. }
    18. ]

            4、补充:Child 类结构如下

    1. public class Child {
    2. @ApiModelProperty(value = "id2号")
    3. public int id22 ;
    4. @ApiModelProperty(value = "数字2号")
    5. protected int num22 ;
    6. @ApiModelProperty(value = "名字2号")
    7. String name22 ;
    8. @ApiModelProperty(value = "地址2号")
    9. private String addr22;
    10. // ignore getter/setter
    11. }

    三、总结

            1、获取一个类中的所有字段,可以使用反射来实现; 转换json字符串,可以使用 Fastjson、Gson、Jackson 等工具类实现 ..

            2、关于反射,注解等相关的知识,可以参考:

    • Java反射 getFields和 getDeclaredFields 方法的区别_HaHa_Sir的博客-CSDN博客_getfields
    • java 反射多级调用实现原理 java EL表达式多级调用实现原理_HaHa_Sir的博客-CSDN博客
    • java Introspector内省和Reflect反射学习、联系和区别_HaHa_Sir的博客-CSDN博客

            3、idea 方法注释模板设置: Idea 设置方法注释模板 Idea 2021.2配置方法类注释模板_HaHa_Sir的博客-CSDN博客_idea设置方法注释模板

  • 相关阅读:
    2023秋招,Java岗最全面试攻略,吃透25个技术栈Offer拿到手软!
    VMware 新建虚拟机
    互联网时代结束了吗?
    C++学习——类其实也是一种作用域
    05【SpringMVC的数据绑定】
    ES6 -- 模块化(CommonJS、AMD、ES Module)
    简单聊下Redis的主从复制和哨兵机制以及集群(面试题)
    Linux网路服务之“PXE网络批量装机和Kickstart全自动化安装”
    Vue3 与 django 进行 前后端数据交互之(Vue 上传)
    Java面向对象
  • 原文地址:https://blog.csdn.net/HaHa_Sir/article/details/127103702
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号