Knife4j

Knife4j 使用教程
简介
Knife4j 是基于 springboot 构建的一个文档生成工具,它可以让开发者为我们的应用生成 API 文档,目的是可以更加方便的基于 API 文档进行测试,生成的文档还可以导出,然后给到前端开发团队,前端开发团队可以基于 API 接口写具体的调用。
版本参考
knife4j 目前主要支持以 Java 开发为主,并且支持 Spring MVC、Spring Boot、Spring Cloud 框架的集成使用。
Knife4j
的版本说明:
版本 | 说明 |
---|---|
1.9.6 | 蓝色皮肤风格,开始更名,增加更多后端模块 |
2.0~2.0.5 | Ui 重写,底层依赖的 springfox 框架版本是 2.9.2 |
2.0.6~2.0.9 | 底层 springfox 框架版本升级知 2.10.5,OpenAPI 规范是 v 2 |
3.0~3.0.3 | 底层依赖 springfox 框架版本升级至 3.0.3, OpenAPI 规范是 v 3 |
4.0~ | 4.0 重要版本,提供 OpenAPI 2 和 OpenAPI 3 两种规范供开发者自行选择,主版本统一 |
Knife4j
的引入要和 Spring Boot
的版本相匹配,所以得首先保证你项目中所使用的 Spring Boot
版本和 Knife4j
的兼容性,以下是版本兼容推荐:
Spring Boot 版本 | knife4j Swagger 2 规范 | knife4j OpenAPI 3 规范 |
---|---|---|
1.5. x~2.0.0 | <Knife4j 2.0.0 | >=knife4j 4.0.0 |
2.0~2.2 | knife4j 2.0.0 ~ 2.0.6 | >=knife4j 4.0.0 |
2.2. x~2.4.0 | knife4j 2.0.6 ~ 2.0.9 | >=knife4j 4.0.0 |
2.4.0~2.7. x | >=knife4j 4.0.0 | >=knife4j 4.0.0 |
= 3.0 | >=knife4j 4.0.0 | >=knife4j 4.0.0 |
如果你不考虑使用 Knife4j
提供的服务端增强功能,引入 Knife4j
的 纯UI版本
没有任何限制,只需要考虑不同的规范即可。
规范说明:
针对 Swagger 2 规范和 OpenAPI 3 规范的说明:
在 Spring Boot 框架中,knife4j 对于服务端将 Spring 开放接口解析成 Swagger 2 或者 OpenAPI 3 规范的框架,也是依赖的第三方框架组件。说明如下:
- Swagger 2 规范:依赖 Springfox 项目,该项目目前几乎处于停更状态,但很多老项目依然使用的是该规范,所以 knife4j 在更新前端 UI 的同时也继续保持了兼容性
- OpenAPI 3 规范:依赖 Springdoc 项目,更新发版频率非常快,建议开发者尽快迁移过来使用 OpenAPI 3 规范,knife4j 后面的重心也会在这里
基本使用
1. 导入相关依赖
Knife4j
的依赖需要兼容 Spring Boot
的版本,除此之外,有些低版本的 Knife4j
还需要保留 swagger
的相关依赖,并且 Knife4j
的版本要和 springfox
的版本相兼容,但是有些高版本的 Knife4j
是不需要引入 swagger
相关依赖的,例如 3.0.3
版本。
1 | <dependency> |
注意: 不能与
Swagger2
依赖一起使用,否则会报错
2. 开启 knife4j 配置
1 |
|
3. 编写 knife4j 配置
方式一:通过编写配置类
1 |
|
注意:. apis (RequestHandlerSelectors.basePackage (“com. sky. controller. user”)) == 自行修改
方式二:通过编写 yaml 文件(仅支持 4.1.0 之后)
1 | knife4j: |
4. 开启静态资源映射
1 | // WebMvcConfiguration |
5. 常用注解使用
@API
:用于请求的类上,表示对类的说明。tags
:说明该类的作用,可以在前台界面上看到的注解value:该参数无意义,在 UI 界面上看不到,不需要配置
用法:
1 |
|
名称由 test-controller
改为 测试-方法
。
@ApiOperation
:该注解用来对某个方法/接口进行描述value
:对该操作进行简单的描述notes
:对操作的详细描述httpMethod
:指定操作使用的 HTTP 方法类型,比如:“GET”、“POST”……但可以直接通过@GetMapping 等来指定,所以使用不多response
:指定操作的响应类型,手动设置此属性将覆盖任何自动生成的数据类型。
用法:
1 |
|
@ApiModel
:该注解是作用于 POJO 等实体类上面的,是用来描述类的一些基本信息的。value
:提供类的一个备用名,如果不设置,默认情况下将使用 class 类的名称description
:对于类,提供一个详细的描述信息- parent:这个属性用于描述的是类的一些父类信息
- discriminator:主要体现在断言当中
- subTypes:可以通过这个属性,指定我们想要使用的子类
用法:
1 |
|
@ApiParam
:用于描述 API 方法的参数信息。它通常用于标注方法参数value
:描述参数的含义或用途。example
:提供参数的示例值,帮助开发者理解参数的具体格式或内容。required
:指定参数是否为必填项,默认为false
。allowableValues
:定义参数的可选值范围,通常用于枚举类型或指定数值区间。dataType
:显式指定参数的数据类型(如String
、Integer
等)。通常情况下,Swagger 会自动推断数据类型,但可以通过此属性手动指定。
用例:
1 | public ResponseEntity<List<User>> getUsers( |
@ApiModelProperty
:作用于 POJO 等实体类的属性值上value
:提供字段的描述信息,说明该属性的用途或含义。example
:指定字段的示例值,便于用户理解字段的数据格式和内容。required
:指定字段是否为必填项,默认为false
。设置为true
时,表明此字段在请求或响应中不可省略。allowableValues
:定义字段的可选值,通常用于限定字段值范围,如枚举类型或指定数值区间。position
:定义字段在文档中显示的顺序,数值越小,位置越靠前。dataType
:指定字段的数据类型,如String
、Integer
等。一般情况下会自动推断,可以手动指定。notes
:提供字段的额外说明信息,详细描述或补充字段的相关内容。
用例:
1 |
|
网关聚合
在 Spring Cloud
中,我们可以将每个服务的接口文档全部都整合到 Gateway
中,也就是说我们只要从 Gateway
中打开接口文档就能够很方便的切换查看各个服务的接口文档。
操作:
- Title: Knife4j
- Author: Lu
- Created at : 2024-07-18 19:32:02
- Updated at : 2024-07-18 21:11:35
- Link: https://lusy.ink/2024/07/18/Knife4j/
- License: This work is licensed under CC BY-NC-SA 4.0.