1、依赖的引入
- 首先是我的springboot的版本号
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
- 然后是 knife4j-openapi3-jakarta-spring-boot-starter的版本号
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.3.0</version>
</dependency>
2、yml文件的配置
- 以下是基础配置
# 配置springdoc-openapi,用于文档化和访问API
springdoc:
# 配置Swagger UI的访问路径和排序方式
swagger-ui:
path: /swagger-ui.html # Swagger UI的访问路径
tags-sorter: alpha # 按字母顺序排序标签
operations-sorter: alpha # 按字母顺序排序操作
# 配置API文档的访问路径
api-docs:
path: /v3/api-docs # API文档的访问路径
# 配置API分组,用于组织和管理API
group-configs:
- group: 'default' # API分组名称
paths-to-match: '/**' # 匹配所有路径
packages-to-scan: net.xxxx.demo.controller # 扫描的包,用于自动发现API
# knife4j的增强配置,不需要增强可以不配
knife4j:
enable: true
setting:
language: zh_cn
- 下面是详细的配置
- 注意:要使用Knife4j提供的增强,
knife4j.enable=true
必须开启
# 配置Knife4j,以启用Swagger文档的增强功能和定制化展示
knife4j:
# 启用Knife4j扩展
enable: true
# 配置展示的文档分组
documents:
-
# 文档分组标题
group: 2.X版本
# 文档分组描述
name: 接口签名
# 指定接口文档的位置
locations: classpath:sign/*
# 配置Knife4j的展示细节和功能开关
setting:
# 设置界面语言
language: zh-CN
# 启用Swagger模型展示
enable-swagger-models: true
# 启用文档管理功能
enable-document-manage: true
# 设置Swagger模型的显示名称
swagger-model-name: 实体类列表
# 是否显示版本信息
enable-version: false
# 是否启用参数缓存刷新
enable-reload-cache-parameter: false
# 启用后端脚本支持
enable-after-script: true
# 过滤特定方法类型的multipart/form-data接口
enable-filter-multipart-api-method-type: POST
# 是否过滤所有multipart/form-data类型的接口
enable-filter-multipart-apis: false
# 启用请求缓存
enable-request-cache: true
# 是否显示自定义主机名
enable-host: false
# 设置自定义的主机名
enable-host-text: 192.168.0.193:8000
# 启用自定义首页
enable-home-custom: true
# 设置自定义首页的路径
home-custom-path: classpath:markdown/home.md
# 是否启用搜索功能
enable-search: false
# 是否显示页脚
enable-footer: false
# 启用自定义页脚内容
enable-footer-custom: true
# 设置自定义页脚的内容
footer-custom-content: Apache License 2.0
# 是否启用动态参数
enable-dynamic-parameter: false
# 启用调试模式
enable-debug: true
# 启用OpenAPI 3.0的支持
enable-open-api: false
# 启用接口分组功能
enable-group: true
# 是否启用CORS跨域支持
cors: false
# 是否启用生产模式
production: false
# 配置基本的认证信息
basic:
# 启用基本认证
enable: false
# 设置用户名
username: test
# 设置密码
password: 12313
- 各个配置说明见下表格
属性 | 默认值 | 说明值 |
---|---|---|
knife4j.enable | FALSE | 是否开启Knife4j增强模式 |
knife4j.cors | FALSE | 是否开启一个默认的跨域配置,该功能配合自定义Host使用 |
knife4j.production | FALSE | 是否开启生产环境保护策略,详情参考文档 |
knife4j.basic | 对Knife4j提供的资源提供BasicHttp校验,保护文档 | |
knife4j.basic.enable | FALSE | 关闭BasicHttp功能 |
knife4j.basic.username | basic用户名 | |
knife4j.basic.password | basic密码 | |
knife4j.documents | 自定义文档集合,该属性是数组 | |
knife4j.documents.group | 所属分组 | |
knife4j.documents.name | 类似于接口中的tag,对于自定义文档的分组 | |
knife4j.documents.locations | markdown文件路径,可以是一个文件夹(classpath:markdowns/*),也可以是单个文件(classpath:md/sign.md) | |
knife4j.setting | 前端Ui的个性化配置属性 | |
knife4j.setting.enable-after-script | TRUE | 调试Tab是否显示AfterScript功能,默认开启 |
knife4j.setting.language | zh-CN | Ui默认显示语言,目前主要有两种:中文(zh-CN)、英文(en-US) |
knife4j.setting.enable-swagger-models | TRUE | 是否显示界面中SwaggerModel功能 |
knife4j.setting.swagger-model-name | Swagger Models | 重命名SwaggerModel名称,默认 |
knife4j.setting.enable-document-manage | TRUE | 是否显示界面中"文档管理"功能 |
knife4j.setting.enable-reload-cache-parameter | FALSE | 是否在每个Debug调试栏后显示刷新变量按钮,默认不显示 |
knife4j.setting.enable-version | FALSE | 是否开启界面中对某接口的版本控制,如果开启,后端变化后Ui界面会存在小蓝点 |
knife4j.setting.enable-request-cache | TRUE | 是否开启请求参数缓存 |
knife4j.setting.enable-filter-multipart-apis | FALSE | 针对RequestMapping的接口请求类型,在不指定参数类型的情况下,如果不过滤,默认会显示7个类型的接口地址参数, 如果开启此配置,默认展示一个Post类型的接口地址 |
knife4j.setting.enable-filter-multipart-api-method-type | POST | 具体接口的过滤类型 |
knife4j.setting.enable-host | FALSE | 是否启用Host |
knife4j.setting.enable-host-text | FALSE | HOST地址 |
knife4j.setting.enable-home-custom | FALSE | 是否开启自定义主页内容 |
knife4j.setting.home-custom-path | 主页内容Markdown文件路径 | |
knife4j.setting.enable-search | FALSE | 是否禁用Ui界面中的搜索框 |
knife4j.setting.enable-footer | TRUE | 是否显示Footer |
knife4j.setting.enable-footer-custom | FALSE | 是否开启自定义Footer |
knife4j.setting.footer-custom-content | FALSE | 自定义Footer内容 |
knife4j.setting.enable-dynamic-parameter | FALSE | 是否开启动态参数调试功能 |
knife4j.setting.enable-debug | TRUE | 启用调试 |
knife4j.setting.enable-open-api | TRUE | 显示OpenAPI规范 |
knife4j.setting.enable-group | TRUE | 显示服务分组 |
3、接口注解
1、@Operation
summary
:简短描述。description
:详细说明。tags
:标签,用于分类API。responses
:响应描述。@Operation(summary = "获取科室列表", description = "返回所有科室的列表") @GetMapping("/depts") public List<Dept> getDepts() { // ... }
2、
@Tag
name
:标签名。description
:标签描述。@Tag(name = "科室管理API", description = "科室相关操作") @RestController @RequestMapping("/depts") public class deptController { // ... }
3、
@ApiResponses
responseCode
:HTTP状态码。description
:描述信息。content
:响应内容类型和模式。@Operation(summary = "获取科室列表") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "成功", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Dept.class))), @ApiResponse(responseCode = "400", description = "请求参数错误"), @ApiResponse(responseCode = "404", description = "找不到资源"), @ApiResponse(responseCode = "500", description = "服务器内部错误") }) @GetMapping("/depts") public List<Dept> getDepts() { // ... }
4、
@Parameter
name
:参数名。description
:参数描述。required
:是否必须参数。schema
:参数模式@Operation(summary = "获取科室详情") @GetMapping("/{id}") public User getDept(@Parameter(description = "科室ID", required = true) @PathVariable Long id) { // ... }
5、
@Schema
description
:字段描述。example
:示例值。required
:是否必须字段。type
:字段类型。@Schema(description = "科室实体") public class Dept { @Schema(description = "科室ID", example = "1") private Long id; @Schema(description = "科室名", example = "肿瘤科") private String name; // getters and setters }
6、
@ArraySchema
schema
:数组元素的模式。description
:数组描述。@Schema(description = "科室列表") public class DeptListResponse { @ArraySchema(schema = @Schema(implementation = Dept.class), description = "科室数组") private List<Dept> depts; // getters and setters }
4、swagger的java配置
package net.xxx.xxx.common.config.swagger;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.media.StringSchema;
import io.swagger.v3.oas.models.parameters.Parameter;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
/**
* Swagger 配置
* <p>
* Spring Doc FAQ: https://springdoc.org/#faq
*
* @author weiyang.shi
* @date 2099/12/12
*/
@Configuration
public class SwaggerConfig {
private static final String TOKEN_HEADER = "Authorization";
/**
* 接口信息
*/
@Bean
public OpenAPI apiInfo() {
return new OpenAPI()
.components(
new Components().addSecuritySchemes(TOKEN_HEADER,
new SecurityScheme()
.type(SecurityScheme.Type.APIKEY)
// 这里配置 bearer 后,你的请求里会自动在 token 前加上 Bearer
.scheme("bearer")
.bearerFormat("JWT")
).addParameters(TOKEN_HEADER,
new Parameter()
.in("header")
.schema(new StringSchema())
.name(TOKEN_HEADER)
))
.info(new Info()
.title("XXX项目接口文档")
.version("1.0.0")
.description("XXX项目接口文档")
.license(new License().name("Apache 2.0")
.url("https://www.baidu.tech"))
)// 引入外部的文档,我这里引得是 springdoc 官方文档地址,你可以不配此项
.externalDocs(new ExternalDocumentation()
.description("SpringDoc Full Documentation")
.url("https://springdoc.org/")
);
}
/**
* 接口分组-测试接口
*
* @return
*/
@Bean
public GroupedOpenApi testOpenApi() {
String[] paths = {"/**"};
String packagesToScan[] = {"net.xxx.xxx.controller.test"};
return GroupedOpenApi.builder()
.group("测试接口")
.packagesToScan(packagesToScan)
.pathsToMatch(paths)
.build();
}
/**
* 接口分组-通用接口
*
* @return
*/
@Bean
public GroupedOpenApi comatOpenApi() {
String[] paths = {"/**"};
String packagesToScan[] = {"net.xxx.xxx.controller.comat"};
return GroupedOpenApi.builder()
.group("通用接口")
.packagesToScan(packagesToScan)
.pathsToMatch(paths)
.build();
}
}
5、访问地址
http://localhost:8080/doc.html