Swagger转换成Excel文件

news2024/11/19 15:39:20

1、添加swagger解析依赖包:

        <dependency>
            <groupId>io.swagger.parser.v3</groupId>
            <artifactId>swagger-parser</artifactId>
            <version>2.1.12</version>
        </dependency>

2、示例代码:

package com.rlcloud.risk.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.models.*;
import io.swagger.models.parameters.Parameter;
import io.swagger.models.properties.Property;
import io.swagger.parser.SwaggerParser;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Map;


/**
 * @Description : Swagger转换成Excel文件
 * @date 2024/3/28 17:30
 * @return
 * @auther xushuanglu
 */
public class SwaggerToExcel {

    public static void main(String[] args) throws Exception {
        // 1、获取Swagger文档
        Swagger swagger = new SwaggerParser().read("http://your-swagger-url/v2/api-docs");

        // 创建Excel工作簿
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Swagger API Documentation");

        // 创建标题行
        Row titleRow = sheet.createRow(0);
        Cell titleCell1 = titleRow.createCell(0);
        titleCell1.setCellValue("Path");
        Cell titleCell2 = titleRow.createCell(1);
        titleCell2.setCellValue("Description");
        // ... 添加其他需要的列标题
        Cell titleCell3 = titleRow.createCell(2);
        titleCell3.setCellValue("dataType");
        Cell titleCell4 = titleRow.createCell(3);
        titleCell4.setCellValue("接口名称");
        Cell titleCell5 = titleRow.createCell(4);
        titleCell5.setCellValue("code");

        int rowNum = 1;
        String oldNum = "001";
        // 遍历每个路径
        for (String path : swagger.getPaths().keySet()) {
            // 遍历每个操作
            for (Map.Entry<HttpMethod, Operation> entry : swagger.getPaths().get(path).getOperationMap().entrySet()) {
                Row row = sheet.createRow(rowNum);
                Cell cell1 = row.createCell(0);
                cell1.setCellValue(path);
                Cell cell2 = row.createCell(1);
                cell2.setCellValue(entry.getValue().getSummary());
                // ... 填充其他需要的信息
                Cell cell3 = row.createCell(2);
                //获取请求参数
                List<Parameter> parameters = entry.getValue().getParameters();

                parameters.stream().forEach(param -> {

                    //请求参数
                    System.out.println("----------------------请求参数开始---------------------------");
                    //请求参数
                    String name = param.getName();
                    String in = param.getIn();
                    //判断请求参数方式
                    if("body".equals(in)){
                        System.out.println(name + "  : 请求参数是body------------------------------");
                        String capitalized = StrUtil.capitalizeFirstLetter(name); // 首字母大写
                        System.out.println("首字母大写转换:  " + capitalized);

                        String replaceStr = capitalized.replace("Entity", "");
                        System.out.println("去掉Entity字符转换:  " + replaceStr);

                        //获取实体列表
                        Map<String, Model> definitions = swagger.getDefinitions();
                        for (String key : definitions.keySet()) {
                            Model value = definitions.get(key);
                            //判断实体名称是否匹配如果匹配,打印字段信息
                            if(replaceStr.equals(value.getTitle())){
                                // 处理key和value
                                System.out.println("----------------------开始---------------------------");
                                System.out.println("实体:   " + value.getTitle());
                                Map<String, Property> properties = value.getProperties();
                                //遍历实体字段
                                properties.forEach((key1, value1) -> {
                                    // 字段值和字段描述:例如:projectName: 项目名称
                                    System.out.println("字段:" + key1 + ":" + "  字段描述:  " + value1.getDescription());
                                });
                                System.out.println("----------------------结束---------------------------");

                                // 创建ObjectMapper实例
                                ObjectMapper mapper = new ObjectMapper();

                                // 将Map转换为JSON字符串
                                String jsonString = null;
                                try {
                                    jsonString = mapper.writeValueAsString(properties);
                                } catch (JsonProcessingException e) {
                                    e.printStackTrace();
                                }

                                // 打印JSON字符串
                                System.out.println(jsonString);

                                cell3.setCellValue(jsonString);

                            }
                        }
                    }

                    String description = param.getDescription();
                    boolean required = param.getRequired();
                    System.out.println("name: " + name + "   in: " + in + " || required: " + required + " || description: " + description);
                    System.out.println("----------------------请求参数结束---------------------------");

                });

                Cell cell4 = row.createCell(3);
                cell4.setCellValue(entry.getValue().getTags().get(0) + "-" + entry.getValue().getSummary());

                Cell cell5 = row.createCell(4);
                cell5.setCellValue(oldNum = String.format("RMS" + "%03d",rowNum));

                rowNum++;
            }
        }

        // 导出Excel文件
        try (FileOutputStream outputStream = new FileOutputStream("swagger_system.xlsx")) {
            workbook.write(outputStream);
        }
    }

}

3、打印信息样例

----------------------请求参数开始---------------------------
collectionTaskCommitRecordEntity  : 请求参数是body------------------------------
首字母大写转换:  CollectionTaskCommitRecordEntity
去掉Entity字符转换:  CollectionTaskCommitRecord
----------------------开始---------------------------
实体:   CollectionTaskCommitRecord
字段:collectContent:  字段描述:   采集内容
字段:collectEndTime:  字段描述:   采集结束时间
字段:collectStartTime:  字段描述:   采集开始时间
字段:collectionTaskId:  字段描述:   信息采集任务id
字段:createBy:  字段描述:  null
字段:createTime:  字段描述:  null
字段:dataRetrieval:  字段描述:   资料调阅
字段:id:  字段描述:  null
字段:informationCollectionId:  字段描述:   信息采集id
字段:isArchived:  字段描述:  null
字段:projectName:  字段描述:   项目名称
字段:relatedMaterials:  字段描述:   相关材料
字段:relatedMaterialsUrl:  字段描述:   相关材料url
字段:remark:  字段描述:   备注
字段:status:  字段描述:   状态
字段:type:  字段描述:   提交类型 1:提交 2:追加提交
字段:updateBy:  字段描述:  null
字段:updateTime:  字段描述:  null
----------------------结束---------------------------
{"collectContent":{"type":"string","format":null,"example":null,"xml":null,"position":null,"description":" 采集内容","title":null,"readOnly":null,"allowEmptyValue":null,"minLength":null,"maxLength":null,"pattern":null,"default":null,"enum":null},"collectEndTime":{"type":"string","format":"date-time","example":null,"xml":null,"position":null,"description":" 采集结束时间","title":null,"readOnly":null,"allowEmptyValue":null,"enum":null},"collectStartTime":{"type":"string","format":"date-time","example":null,"xml":null,"position":null,"description":" 采集开始时间","title":null,"readOnly":null,"allowEmptyValue":null,"enum":null},"collectionTaskId":{"type":"integer","format":"int64","example":null,"xml":null,"position":null,"description":" 信息采集任务id","title":null,"readOnly":null,"allowEmptyValue":null,"minimum":null,"maximum":null,"multipleOf":null,"exclusiveMinimum":null,"exclusiveMaximum":null,"default":null,"enum":null},"createBy":{"type":"string","format":null,"example":null,"xml":null,"position":null,"description":null,"title":null,"readOnly":null,"allowEmptyValue":null,"minLength":null,"maxLength":null,"pattern":null,"default":null,"enum":null},"createTime":{"type":"string","format":"date-time","example":null,"xml":null,"position":null,"description":null,"title":null,"readOnly":null,"allowEmptyValue":null,"enum":null},"dataRetrieval":{"type":"string","format":null,"example":null,"xml":null,"position":null,"description":" 资料调阅","title":null,"readOnly":null,"allowEmptyValue":null,"minLength":null,"maxLength":null,"pattern":null,"default":null,"enum":null},"id":{"type":"integer","format":"int64","example":null,"xml":null,"position":null,"description":null,"title":null,"readOnly":null,"allowEmptyValue":null,"minimum":null,"maximum":null,"multipleOf":null,"exclusiveMinimum":null,"exclusiveMaximum":null,"default":null,"enum":null},"informationCollectionId":{"type":"integer","format":"int64","example":null,"xml":null,"position":null,"description":" 信息采集id","title":null,"readOnly":null,"allowEmptyValue":null,"minimum":null,"maximum":null,"multipleOf":null,"exclusiveMinimum":null,"exclusiveMaximum":null,"default":null,"enum":null},"isArchived":{"type":"string","format":null,"example":null,"xml":null,"position":null,"description":null,"title":null,"readOnly":null,"allowEmptyValue":null,"minLength":null,"maxLength":null,"pattern":null,"default":null,"enum":null},"projectName":{"type":"string","format":null,"example":null,"xml":null,"position":null,"description":" 项目名称","title":null,"readOnly":null,"allowEmptyValue":null,"minLength":null,"maxLength":null,"pattern":null,"default":null,"enum":null},"relatedMaterials":{"type":"string","format":null,"example":null,"xml":null,"position":null,"description":" 相关材料","title":null,"readOnly":null,"allowEmptyValue":null,"minLength":null,"maxLength":null,"pattern":null,"default":null,"enum":null},"relatedMaterialsUrl":{"type":"string","format":null,"example":null,"xml":null,"position":null,"description":" 相关材料url","title":null,"readOnly":null,"allowEmptyValue":null,"minLength":null,"maxLength":null,"pattern":null,"default":null,"enum":null},"remark":{"type":"string","format":null,"example":null,"xml":null,"position":null,"description":" 备注","title":null,"readOnly":null,"allowEmptyValue":null,"minLength":null,"maxLength":null,"pattern":null,"default":null,"enum":null},"status":{"type":"string","format":null,"example":null,"xml":null,"position":null,"description":" 状态","title":null,"readOnly":null,"allowEmptyValue":null,"minLength":null,"maxLength":null,"pattern":null,"default":null,"enum":null},"type":{"type":"integer","format":"int32","example":null,"xml":null,"position":null,"description":" 提交类型 1:提交 2:追加提交","title":null,"readOnly":null,"allowEmptyValue":null,"minimum":null,"maximum":null,"multipleOf":null,"exclusiveMinimum":null,"exclusiveMaximum":null,"default":null,"enum":null},"updateBy":{"type":"string","format":null,"example":null,"xml":null,"position":null,"description":null,"title":null,"readOnly":null,"allowEmptyValue":null,"minLength":null,"maxLength":null,"pattern":null,"default":null,"enum":null},"updateTime":{"type":"string","format":"date-time","example":null,"xml":null,"position":null,"description":null,"title":null,"readOnly":null,"allowEmptyValue":null,"enum":null}}
name: collectionTaskCommitRecordEntity   in: body || required: true || description: collectionTaskCommitRecordEntity
----------------------请求参数结束---------------------------

4、导出Excel样例
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1594174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常见漏洞原理简介

今天复习上个月学的漏洞的知识点。 一、SQL注入漏洞 sql注入是就是通过把SQL语句插入到Web表单提交或输入域名或页面请求的查询字符串&#xff0c;最终达到欺骗服务器执行恶意的SQL命令。 理解这张图就可以理解sql注入的原理&#xff0c;因为在mysql数据库中存在一个Informat…

vim中如何进行批量注释?取消批量注释?

1.首先进入vim的命令模式。然后按【ctrlV】 2.按下【J】,可以向下继续选中。 3.选择完成后&#xff0c;直接按下【shifti】进入插入模式。输入【//】&#xff0c; 4.最后按【ESC】即可进行批量注释。 取消注释又是如何操作的呢&#xff1f; 前面的步骤都一样&#xff0c;首先…

算法100例(持续更新)

算法100道经典例子&#xff0c;按算法与数据结构分类 1、祖玛游戏2、找下一个更大的值3、换根树状dp4、一笔画完所有边5、树状数组&#xff0c;数字1e9映射到下标1e56、最长回文子序列7、超级洗衣机&#xff0c;正负值传递次数8、Dijkstra9、背包问题&#xff0c;01背包和完全背…

1.9 数据结构之 并查集

编程总结 在刷题之前需要反复练习的编程技巧&#xff0c;尤其是手写各类数据结构实现&#xff0c;它们好比就是全真教的上乘武功 本栏目为学习笔记参考&#xff1a;https://leetcode.cn/leetbook/read/disjoint-set/oviefi/ 1.0 概述 并查集&#xff08;Union Find&#xff09…

5、LMDeploy 量化部署 LLMVLM实战(homework)

基础作业&#xff08;结营必做&#xff09; 完成以下任务&#xff0c;并将实现过程记录截图&#xff1a; 配置lmdeploy运行环境 由于环境依赖项存在torch&#xff0c;下载过程可能比较缓慢。InternStudio上提供了快速创建conda环境的方法。打开命令行终端&#xff0c;创建一…

SENet模型原理及代码介绍

一.模型简介&#xff1a; SENet的全称叫Squeeze-and-Excitation Networks&#xff08;挤压-激励网络&#xff0c;简称SENet&#xff09;&#xff0c;于2017年提出&#xff0c;并拿下了当年的ImageNet分类比赛的冠军。ResNet是2015年ImageNet的冠军&#xff0c;2016年ResNeXt&am…

字节码文件的组成

字节码文件的组成 字节码文件的组成1 以正确的姿势打开文件2 字节码文件的组成2.1 基本信息2.2 常量池2.3 字段2.4 方法2.5 属性 3 字节码常用工具3.1 javap3.2 jclasslib插件3.3 Arthas 4 字节码常见指令 字节码文件的组成 1 以正确的姿势打开文件 字节码文件中保存了源代码…

构建BTI的编译工具支持

BTI分支目标识别精讲与实践系列 思考 1、什么是代码重用攻击&#xff1f;什么是ROP攻击&#xff1f;区别与联系&#xff1f; 2、什么是JOP攻击&#xff1f;间接分支跳转指令&#xff1f; 3、JOP攻击的缓解技术&#xff1f;控制流完整性保护&#xff1f; 4、BTI下的JOP如何…

MCU最小系统的电源模块设计和复位模块的设计

最小操作系统就是一个电路&#xff0c;这个电路里面必须要的东西&#xff08;如人需要喝水吃饭温度等情况&#xff0c;才能或者&#xff09; 现在我们要解决这三个问题 这里V开头的&#xff0c;都是电源管脚 这里解释一下&#xff1a; 这里要注意哪些是电路电压&#xff0c;哪…

【300套】基于Springboot+Vue的Java毕业设计项目(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f9e1;今天给大家分享300的Java毕业设计&#xff0c;基于Springbootvue框架&#xff0c;这些项目都经过精心挑选&#xff0c;涵盖了不同的实战主题和用例&#xff0c;可做毕业…

考研高数(对比一元微分学和一元积分学概念)

1.一元微分学的概念和一元积分学的概念 一元微分 1.导数 函数一点可导的充要条件&#xff1a;左右导数均存在且相等&#xff08;也可说左右极限存在且相等&#xff09; 函数一点可导的必要条件&#xff1a;若f(x)在一点可导&#xff0c;则f(x)在该点连续。反之未必。 2.导数…

如何进行计量经济分析

计量经济分析是定量分析的常用方法&#xff0c;在经济分析领域有着广泛且重要的应用。计量经济分析以一定的经济理论和统计数据为基础&#xff0c;运用数学、统计学相关方法&#xff0c;通过建立计量模型&#xff0c;并运用软件进行操作&#xff0c;从而实现对经济问题的定量分…

day57 判断子序列 不同的子序列 两个字符串的删除操作 编辑距离

题目1 392 判读子序列 题目链接 392 判断子序列 题意 判断字符串s是否为字符串t的子序列 &#xff08;子序列的相对位置在原字符串中不改变&#xff09; 就是求最长公共子序列的长度与字符串s的长度是否相等 动态规划 1&#xff09;确定dp数组及下标i的含义 dp[i][j]…

视频知识整理

1 视频播放器原理 视频播放器播放一个互联网上的视频文件&#xff0c;需要经过以下几个步骤&#xff1a; 解协议&#xff1a;将流媒体协议的数据&#xff0c;解析为标准的相应的封装格式数据 解封装&#xff1a;将封装格式的数据&#xff0c;分离成为音频流压缩编码数据和视…

【ESP32使用MAX98357播放音频】

【ESP32使用MAX98357播放音频】 1. 前言2. 先决条件2.1 硬件准备2.2 软件准备2.3 接线3. 核心代码3.1 驱动实现3.2 代码解析4. 播放音乐5. 结论1. 前言 在物联网和智能家居领域,音频播放功能越来越受到重视。ESP32作为一款功能强大的微控制器,结合MAX98357音频放大器模块,可…

Java入门教程||Java 变量

Java 变量 Java教程 - Java变量 变量由标识符&#xff0c;类型和可选的初始化程序定义。变量还具有范围&#xff08;可见性/生存期&#xff09;。 Java变量类型 在Java中&#xff0c;必须先声明所有变量&#xff0c;然后才能使用它们。变量声明的基本形式如下所示&#xff1…

CVPR 2024 | 仅需文本或图像提示,新框架CustomNeRF精准编辑3D场景

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 美图影像研究院&#xff08;MT Lab&#xff09;与中国科学院信息工程研究所、北京航空航天大…

AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4

原文:AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4 | MLExpert - Crush Your Machine Learning interview In this tutorial, well explore AutoGen1, a Microsoft library that lets you create LLM applications with agents. These agents can communicate and …

Qt控件---输入类

文章目录 QLineEdit&#xff08;单行输入&#xff09;设置验证器 QTextEdit&#xff08;多行输入&#xff09;QComboBox&#xff08;下拉框&#xff09;通过读取文件设置条目 QSpinBox & QDoubleSpinBox&#xff08;数字微调框&#xff09;QDateEdit & QTimeEdit &…

十款组装台式电脑可能会用到的主板,看下有没有适合你的

序言 组装台式电脑,还是升级老化的电脑?以下是你需要了解的有关选择合适主板的所有信息。 如果说内存、显卡和 CPU 是 PC 充满活力的四肢,是完成工作和启动你喜爱的游戏的部件,那么主板就是骨架和结缔组织,甚至是灵魂。 可以肯定的是,其他组件在决定 PC 的整体性能和功…