Swagger系列:SpringBoot3.x中使用Knife4j
一、简介
Knife4j是一个集Swagger2 和 OpenAPI3 为一体的增强解决方案
Knife4j 是为 Java MVC 框架集成 Swagger 生成 Api 文档的增强解决方案,前身是 swagger-bootstrap-ui,致力于 springfox-swagger 的增强 UI 实现。knife4j 为了契合微服务的架构发展,由于原来 swagger-bootstrap-ui 采用的是后端 Java 代码 + 前端 UI 混合打包的方式,在微服务架构下显的很臃肿,因此项目正式更名为 knife4j,更名后主要专注的方面如下:
- 后端 Java 代码以及前端 UI 模块进行了分离,在微服务架构下使用更加灵活
- 提供专注于 Swagger 的增强解决方案,不同于只是单纯增强前端 UI 部分
二、版本说明
| 版本 | 说明 |
|---|---|
| 1.0~1.9.6 | 名称是叫swagger-bootstrap-ui,蓝色风格Ui |
| 1.9.6 | 蓝色皮肤风格,开始更名,增加更多后端模块 |
| 2.0~2.0.5 | Ui基于Vue2.0+AntdV重写,黑色风格,参考示例,底层依赖的springfox框架版本是2.9.2,仅提供Swagger2规范的适配 |
| 2.0.6~2.0.9 | 底层springfox框架版本升级知2.10.5,,仅提供Swagger2规范的适配 |
| 3.0~3.0.3 | 底层依赖springfox框架版本升级至3.0.3,OpenAPI规范是v3,过度版本,建议开发者不要使用 |
| 4.0~ | 区分OpenAPI2和Swagger3的Maven坐标artifactId OpenAPI2规范服务端解析框架稳定在springfox2.10.5 OpenAPI3框架服务端解析跟随springdoc项目更新迭代 建议开发者使用该版本,请参考4.x升级文档 |
Spring Boot版本兼容性
| Spring Boot版本 | Knife4j Swagger2规范 | Knife4j OpenAPI3规范 |
|---|---|---|
| 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 |
| nife4j版本 | Swagger2规范 | OpenAPI3规范 | 说明 |
|---|---|---|---|
| 1.0~1.9.6 | springfox 2.9.2 | 无 | Knife4j的前身,名称为swagger-bootstrap-ui |
| 1.9.6~2.0.5 | springfox 2.9.2 | 无 | |
| 2.0.6~2.0.9 | springfox 2.10.5 | 无 | |
| 3.0.0~3.0.3 | springfox 3.0.3 | 无 | 过度版本,建议开发者不要使用 |
| 4.0.0~ | springfox 2.10.5 | >=springdoc-openapi 1.6.9 | Swagger2规范稳定使用springfox2.10.5保持不变。开发者应该尽早迁移到OpenAPI3规范上来,请参考4.x升级文档 |
三、使用
1.引入依赖
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.3.0</version>
</dependency>
2.编写配置类
package com.mcode.knife4jdemo.config;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* ClassName: Knife4jConfig
* Package: com.mcode.knife4jdemo.config
* Description:
*
* @Author: robin
* @Version: v1.0
*/
@Configuration
public class Knife4jConfig {
@Bean
public GroupedOpenApi adminApi() { // 创建了一个api接口的分组
return GroupedOpenApi.builder()
.group("admin-api") // 分组名称
.pathsToMatch("/admin/**") // 接口请求路径规则
.build();
}
@Bean
public OpenAPI openAPI(){
return new OpenAPI()
.info(new Info()
.title("Knife4j标题")
.description("Knife4j说明")
.version("v1")
.contact(new Contact().name("robin").email("robin@gmail.com"))
.license(new License().name("Apache 2.0").url("http://springdoc.org"))
);
}
}
3.编写User类用作模型
package com.mcode.knife4jdemo.entity;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* ClassName: User
* Package: com.mcode.knife4jdemo.entity
* Description:
*
* @Author: robin
* @Version: v1.0
*/
@Schema(description = "用户实体")
public class User {
@Schema(description = "用户名称")
private String userName;
@Schema(description = "密码")
private String password;
@Schema(description = "邮箱")
private String email;
@Schema(description = "年龄")
private int age;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User() {
}
public User(String userName, String password, String email, int age) {
this.userName = userName;
this.password = password;
this.email = email;
this.age = age;
}
}
4.编写控制器
package com.mcode.knife4jdemo.controller;
import com.mcode.knife4jdemo.entity.User;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;
/**
* ClassName: IndexController
* Package: com.mcode.knife4jdemo.controller
* Description:
*
* @Author: robin
* @Version: v1.0
*/
@RestController
@Tag(name = "首页")
@RequestMapping("/admin/index")
public class IndexController {
@Operation(summary = "获取用户")
@GetMapping("/getUser")
public User getUser( @Parameter(name = "userName",description = "用户名称",in = ParameterIn.QUERY)String userName) {
return new User(userName, "123456", "123@qq.com", 18);
}
@Operation(summary = "新增用户")
@PostMapping("/addUser")
public Boolean addUser(@RequestBody User user) {
return true;
}
}
SpringDoc注解具体可看:https://www.cnblogs.com/vic-tory/p/17690501.html
四、效果图
首页

控制器

Swagger系列:SpringBoot3.x中使用Knife4j的更多相关文章
- 浏览器扩展系列————在WPF中定制WebBrowser快捷菜单
原文:浏览器扩展系列----在WPF中定制WebBrowser快捷菜单 关于如何定制菜单可以参考codeproject上的这篇文章:http://www.codeproject.com/KB/book ...
- 20.翻译系列:Code-First中的数据库迁移技术【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/migration-in-code-first.aspx EF 6 Code-First ...
- 8.翻译系列: EF 6中配置领域类(EF 6 Code-First 系列)
原文地址:http://www.entityframeworktutorial.net/code-first/configure-classes-in-code-first.aspx EF 6 Cod ...
- 10.翻译系列:EF 6中的Fluent API配置【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/fluent-api-in-code-first.aspx EF 6 Code-Firs ...
- python基础系列教程——Python中的编码问题,中文乱码问题
python基础系列教程——Python中的编码问题,中文乱码问题 如果不声明编码,则中文会报错,即使是注释也会报错. # -*- coding: UTF-8 -*- 或者 #coding=utf-8 ...
- iOS流布局UICollectionView系列七——三维中的球型布局
摘要: 类似标签云的球状布局,也类似与魔方的3D布局 iOS流布局UICollectionView系列七——三维中的球型布局 一.引言 通过6篇的博客,从平面上最简单的规则摆放的布局,到不规则的瀑 ...
- 【iOS系列】-oc中特有的语法
[iOS系列]-oc中特有的语法 oc数据类型: 1,基本类型 2,对象类型 3,id 4,BOOL 5,block 6,SEL 1:category 使用继承关系来扩充一个类,有一个弊病,高耦合性 ...
- shell编程系列1--shell脚本中的变量替换
shell编程系列1--shell脚本中的变量替换 变量替换总结: .${变量#匹配规则} # 从头开始匹配,最短删除 .${变量##匹配规则} # 从头开始匹配,最长删除(贪婪模式) .${变量%匹 ...
- 告诉你:DOS系统实例手册系列专辑连载中
DOS系统实例手册系列专辑连载中 内容提要:
- 【BASIS系列】SAP 中查看account登陆次数及时间的情况
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[BASIS系列]SAP 中查看account登 ...
随机推荐
- macOS 系统 Kafka 快速入门
Kafka 的核心功能是高性能的消息发送与高性能的消息消费.以下是 Kafka 的快速入门教程. 下载并解压缩 Kafka 二进制代码压缩文件 打开 Kafka 官网的下载地址,可以看到不同版本的 K ...
- SQL Server中的NULL值处理:判断与解决方案
摘要: 在SQL Server数据库中,NULL是表示缺少数据或未知值的特殊标记.处理NULL值是SQL开发人员经常遇到的问题之一.本文将介绍SQL Server中判断和处理NULL值的不同方法,以及 ...
- SQL ERVER 表转化为C#实体(SQL 代码)
本文推出SqlServer表转化为实体的sql代码 在VS中有可以自带生成实体类的快捷操作,但是生成的代码比较杂乱,很多东西都是不需要的,一个一个去敲又很浪费时间,关键太无聊了 在闲暇之余写一份代码供 ...
- [GIT]解决:failed to push some refs to ...(过程重现)
本问题有很多种情况,解决方法也很多,本文只针对笔者本人的自身诉求和情况,选择了一种适合我的解决方法.仅供参考. 1 问题描述 johnnyzen@XXDSSS MINGW64 /e/source_co ...
- 使用 Dockerfile 构建生产环境镜像
传统部署的坑: 1202 年了,如果你连 Docker 都不知道是什么,我建议买一本书看看--或者谷歌一下,博客已经写烂了. 为什么有这篇文章,是因为我在真正做容器化改造的时候,发现公司生产环境存在大 ...
- hadoop 启动增加DEBUG信息
export HADOOP_ROOT_LOGGER=DEBUG,console
- React: 按钮点击时修改颜色
背景 当存在多个点击按钮时,需要提示用户点击的哪个按钮,所以要进行颜色的修改 import * as React from 'react'; import './style.css'; export ...
- [nginx]lua控制响应头
前言 适用场景:添加CDN缓存时间.操作set-cookie.标记业务数据类型等. 获取响应头 指令:ngx.resp.get_headers 语法:headers = ngx.resp.get_he ...
- 部署安装kafka集群
准备 zookeeper节点: 172.50.13.103 172.50.13.104 172.50.13.105 kafka版本: 2.13-2.7.0 安装步骤 部署安装zookeeper集群.参 ...
- 文心一言 VS 讯飞星火 VS chatgpt (76)-- 算法导论7.3 1题
一.如果用go语言,为什么我们分析随机化算法的期望运行时间,而不是其最坏运行时间呢? 文心一言: 在分析算法的性能时,期望运行时间是一个重要的指标,它描述了算法在平均情况下的表现.期望运行时间考虑了所 ...