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和valueSystem.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样例