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样例