Swagger转换成Excel文件

1、添加swagger解析依赖包:

xml 复制代码
        <dependency>
            <groupId>io.swagger.parser.v3</groupId>
            <artifactId>swagger-parser</artifactId>
            <version>2.1.12</version>
        </dependency>

2、示例代码:

java 复制代码
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、打印信息样例

java 复制代码
----------------------请求参数开始---------------------------
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样例

相关推荐
m0_748230941 小时前
Rust赋能前端: 纯血前端将 Table 导出 Excel
前端·rust·excel
Swift社区2 小时前
Excel 列名称转换问题 Swift 解答
开发语言·excel·swift
neeef_se3 小时前
Vue中使用a标签下载静态资源文件(比如excel、pdf等),纯前端操作
前端·vue.js·excel
℘团子এ3 小时前
js和html中,将Excel文件渲染在页面上
javascript·html·excel
菠萝蚊鸭12 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
一只小灿灿12 小时前
VB.NET在 Excel 二次开发中的全面应用
.net·excel
是小崔啊15 小时前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
Excel_easy16 小时前
批量识别工作表中二维码信息-Excel易用宝
excel·wps
m0_748255261 天前
easyExcel导出大数据量EXCEL文件,前端实现进度条或者遮罩层
前端·excel
小张认为的测试1 天前
Linux性能监控命令_nmon 安装与使用以及生成分析Excel图表
linux·服务器·测试工具·自动化·php·excel·压力测试