【SpringBoot3】集成Knife4j、springdoc-openapi作为接口文档

一、什么是springdoc-openapi

Springdoc-openapi 是一个用于生成 OpenAPI(之前称为 Swagger)文档的库,专为 Spring Boot 应用程序设计。它可以根据你的 Spring MVC 控制器、REST 控制器和其他 Spring Bean 自动生成 OpenAPI 文档,从而帮助你在开发 RESTful API 时更加高效地管理和维护 API 文档。Springdoc-openapi 支持 OpenAPI 3.x 版本,并提供了一些额外的功能,如自定义配置、注解支持和与 Spring Boot 的无缝集成。

当你构建 RESTful API 时,API 文档是非常重要的,因为它们提供了对 API 的清晰描述,包括可用端点、请求参数、响应模型等信息。Springdoc-openapi 就是为了简化生成这些 API 文档而设计的。

Springdoc-openapi 的主要功能包括:

  1. 自动生成文档: Springdoc-openapi 可以自动扫描你的 Spring Boot 应用程序,并根据其中的控制器和其他相关组件生成 OpenAPI 文档。你无需手动编写文档,大部分信息都是自动生成的。

  2. 支持 OpenAPI 3.x: Springdoc-openapi 支持 OpenAPI 3.x 版本规范,这是当前 RESTful API 开发的主流规范。

  3. 注解支持: 它与 Spring MVC 注解和其他常见的 Spring 注解完全兼容,你可以使用这些注解来定制 API 的文档信息,例如请求参数的描述、响应的格式等。

  4. 自定义配置: Springdoc-openapi 提供了丰富的配置选项,你可以根据项目的需求进行自定义配置,以满足特定的文档生成需求。

  5. 集成简便: 由于 Springdoc-openapi 是专为 Spring Boot 应用程序设计的,因此它与 Spring Boot 无缝集成。你只需将 Springdoc-openapi 添加到项目的依赖中,它就会自动集成到你的应用程序中,开始生成 API 文档。

springdoc-openapi 使得生成和维护 RESTful API 文档变得简单而高效,帮助开发人员专注于业务逻辑而不是文档的编写。

在这里插入图片描述

核心注解

以下是 Springdoc-openapi 中一些常用的核心注解及其描述:

注解描述
@OpenAPIDefinition定义 OpenAPI 规范的基本信息,如 API 的标题、版本、服务器等
@Operation用于描述 API 操作(端点),包括操作的摘要、描述、请求和响应等信息
@ApiResponse定义操作的响应,包括响应的状态码、描述和响应模型等信息
@Parameter定义操作的参数,包括路径参数、查询参数、请求头参数等
@PathVariable定义路径参数,用于提取 URL 中的变量
@RequestParam定义查询参数,用于从请求中获取参数的值
@ApiParam在方法参数上使用,用于描述参数的含义和约束
@ApiResponses在控制器类上使用,为多个操作定义通用的响应规范
@ApiResponseExtension在 @Operation 或 @ApiResponse 上使用,用于扩展响应信息
@SecurityRequirement定义操作所需的安全要求,如需要的身份验证方案、安全范围等
@SecurityScheme定义安全方案,包括认证方式(如 Basic、OAuth2 等)、令牌 URL、授权 URL 等
@Tags定义操作的标签,用于对操作进行分类和组织
@Hidden在文档中隐藏标记的操作或参数,可以用于隐藏一些内部或不需要在文档中展示的部分
@Extension用于为生成的 OpenAPI 文档添加自定义的扩展信息,可以在文档中增加额外的元数据或自定义字段
@RequestBodySchema定义请求体的数据模型,允许对请求体进行更细粒度的描述和约束,如属性的名称、类型、格式、必填性等
@ApiResponseSchema定义响应的数据模型,允许对响应体进行更细粒度的描述和约束,如属性的名称、类型、格式、必填性等
@ExtensionProperty在 @Extension 注解上使用,用于定义自定义扩展的属性,可以添加额外的元数据或自定义字段到生成的 OpenAPI 文档中

这些注解可以帮助开发者更精细地描述 API 的各个方面,从而生成更加详细和准确的 OpenAPI 文档。

从 Swagger 2 升级为 Swagger 3

下面是将 Swagger 2 注解替换为 Swagger 3 注解的翻译:

  • @Api → @Tag
  • @ApiIgnore → @Parameter(hidden = true) 或 @Operation(hidden = true) 或 @Hidden
  • @ApiImplicitParam → @Parameter
  • @ApiImplicitParams → @Parameters
  • @ApiModel → @Schema
  • @ApiModelProperty(hidden = true) → @Schema(accessMode = READ_ONLY)
  • @ApiModelProperty → @Schema
  • @ApiOperation(value = “foo”, notes = “bar”) → @Operation(summary = “foo”, description = “bar”)
  • @ApiParam → @Parameter
  • @ApiResponse(code = 404, message = “foo”) → @ApiResponse(responseCode = “404”, description = “foo”)

这些转换可以帮助将现有的 Swagger 2 注解替换为 Swagger 3 注解,以便与 Springdoc-openapi-starter-webmvc-ui 库一起使用。

二、什么是Knife4j

Knife4j 是一个基于 Swagger 实现的接口文档管理工具,它提供了一套简单易用的 UI 界面,用于展示和管理 Swagger 生成的 API 文档。与传统的 Swagger UI 相比,Knife4j 在 UI 设计和功能上进行了改进和增强,使得接口文档的浏览和管理更加方便和直观。

Knife4j 的特点和功能包括:

  1. 美观的界面设计: Knife4j 提供了一个美观、直观的界面,用户可以通过该界面轻松地浏览和理解 API 文档,以及进行相关操作。

  2. 增强的交互功能: Knife4j 在 Swagger UI 的基础上增加了一些交互功能,如请求参数的快速填充、响应结果的格式化显示等,提升了用户体验。

  3. 便捷的文档导航: Knife4j 提供了便捷的文档导航功能,用户可以通过目录结构快速定位到所需的接口文档,方便查阅和使用。

  4. 支持在线调试: Knife4j 允许用户在界面上直接进行接口调用和测试,无需额外的工具或插件,便可完成接口的调试和验证。

  5. 自动生成文档: Knife4j 可以直接集成到 Spring Boot 项目中,通过注解和配置自动生成接口文档,简化了文档编写的工作量。

总的来说,Knife4j 是一个功能强大、易用的接口文档管理工具,能够帮助开发者更加高效地管理和维护 API 文档,提升接口开发和调试的效率。

主要配置项

在以前的版本中,开发者需要在配置文件中手动使用@EnableKnife4j来使用增强,自2.0.6版本后,只需要在配置文件中配置knife4j.enable=true即可不在使用注解

注意:要使用Knife4j提供的增强,knife4j.enable=true必须开启

各个配置属性说明如下:

属性默认值说明值
knife4j.enablefalse是否开启Knife4j增强模式
knife4j.corsfalse是否开启一个默认的跨域配置,该功能配合自定义Host使用
knife4j.productionfalse是否开启生产环境保护策略
knife4j.basic对Knife4j提供的资源提供BasicHttp校验,保护文档
knife4j.basic.enablefalse关闭BasicHttp功能
knife4j.basic.usernamebasic用户名
knife4j.basic.passwordbasic密码
knife4j.documents自定义文档集合,该属性是数组
knife4j.documents.group所属分组
knife4j.documents.name类似于接口中的tag,对于自定义文档的分组
knife4j.documents.locationsmarkdown文件路径,可以是一个文件夹(classpath:markdowns/*),也可以是单个文件(classpath:md/sign.md)
knife4j.setting前端Ui的个性化配置属性
knife4j.setting.enable-after-scripttrue调试Tab是否显示AfterScript功能,默认开启
knife4j.setting.languagezh-CNUi默认显示语言,目前主要有两种:中文(zh-CN)、英文(en-US)
knife4j.setting.enable-swagger-modelstrue是否显示界面中SwaggerModel功能
knife4j.setting.swagger-model-nameSwagger Models重命名SwaggerModel名称,默认
knife4j.setting.enable-document-managetrue是否显示界面中"文档管理"功能
knife4j.setting.enable-reload-cache-parameterfalse是否在每个Debug调试栏后显示刷新变量按钮,默认不显示
knife4j.setting.enable-versionfalse是否开启界面中对某接口的版本控制,如果开启,后端变化后Ui界面会存在小蓝点
knife4j.setting.enable-request-cachetrue是否开启请求参数缓存
knife4j.setting.enable-filter-multipart-apisfalse针对RequestMapping的接口请求类型,在不指定参数类型的情况下,如果不过滤,默认会显示7个类型的接口地址参数,如果开启此配置,默认展示一个Post类型的接口地址
knife4j.setting.enable-filter-multipart-api-method-typePOST具体接口的过滤类型
knife4j.setting.enable-hostfalse是否启用Host
knife4j.setting.enable-host-textfalseHOST地址
knife4j.setting.enable-home-customfalse是否开启自定义主页内容
knife4j.setting.home-custom-path主页内容Markdown文件路径
knife4j.setting.enable-searchfalse是否禁用Ui界面中的搜索框
knife4j.setting.enable-footertrue是否显示Footer
knife4j.setting.enable-footer-customfalse是否开启自定义Footer
knife4j.setting.footer-custom-contentfalse自定义Footer内容
knife4j.setting.enable-dynamic-parameterfalse是否开启动态参数调试功能
knife4j.setting.enable-debugtrue启用调试
knife4j.setting.enable-open-apitrue显示OpenAPI规范
knife4j.setting.enable-grouptrue显示服务分组

三、SpringBoot3.0 集成 Knife4j 步骤

1、添加依赖(3.0和2.0不一样)

<dependency>
	<groupId>com.github.xiaoymin</groupId>
	<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
	<version>4.4.0</version>
</dependency>
  • Spring Boot 3 只支持OpenAPI3规范
  • Knife4j提供的starter已经引用springdoc-openapi的jar,开发者需注意避免jar包冲突
  • JDK版本必须 >= 17

2、在 application.yml 中添加配置

springdoc:
  swagger-ui:
    tags-sorter: alpha
  group-configs:
    - group: bis
      display-name: "业务接口文档"
      paths-to-match: '/**'
      packages-to-scan: org.shi9.module.bis
    - group: system
      display-name: "系统接口文档"
      paths-to-match: '/**'
      packages-to-scan: org.shi9.module.system
  default-flat-param-object: true
knife4j:
  # 开启增强配置
  enable: true
  # 开启生产环境屏蔽(如果是生产环境,需要把下面配置设置true)
#  production: true
  setting:
    language: zh_cn
    swagger-model-name: 实体类列表
  basic: # 开始授权认证
    enable: true
    username: admin
    password: 123456

在 group-configs 下面配置不同的模块的接口分组,也可以通过代码配置,建议在yml中配置。代码配置类似如下:

@Bean
public GroupedOpenApi publicApi() {
    return GroupedOpenApi.builder()
            .group("springshop-public")
            .pathsToMatch("/public/**")
            .build();
}
@Bean
public GroupedOpenApi adminApi() {
    return GroupedOpenApi.builder()
            .group("springshop-admin")
            .pathsToMatch("/admin/**")
            .addOpenApiMethodFilter(method -> method.isAnnotationPresent(Admin.class))
            .build();
}

3、增加配置类 SwaggerConfig.java

import io.swagger.v3.oas.models.Components;
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 io.swagger.v3.oas.models.security.SecurityScheme;
import org.shi9.common.constant.CommonConstant;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfig {
    @Bean
    public OpenAPI customOpenAPI() {
        Contact contact = new Contact();
        contact.setEmail("wlddhj@163.com");
        contact.setName("huangjian");
        contact.setUrl("http://doc.xiaominfo.com");
        return new OpenAPI()
                // 增加swagger授权请求头配置
                .components(new Components().addSecuritySchemes(CommonConstant.X_ACCESS_TOKEN,
                        new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme(CommonConstant.X_ACCESS_TOKEN)))
                .info(new Info()
                        .title("Shi9 后台服务API接口文档")
                        .version("1.0")
                        .contact(contact)
                        .description("Knife4j集成springdoc-openapi示例")
                        .termsOfService("http://doc.xiaominfo.com")
                        .license(new License().name("Apache 2.0")
                                .url("http://www.apache.org/licenses/LICENSE-2.0.html")));
    }
}

4、启动项目

项目启动后,直接打开地址 http://localhost:8081/doc.html,可以看见类型如下页面

在这里插入图片描述

参考

  • https://doc.xiaominfo.com/docs/quick-start
  • https://springdoc.org/#getting-started
  • https://springdoc.org/
  • https://gitee.com/xiaoym/knife4j

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/357746.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Google Chrome 中出现 ERR_SSL_KEY_USAGE_INCOMPATIBLE 错误

证书的方式发生了变化&#xff0c;出现了这个新错误&#xff0c;导致我无法浏览该网站。 可以右键属性获取位置 关闭导航器chrome并转到文件夹&#xff0c;找到Local State文件并删除 执行指令结束进程&#xff0c;重新打开浏览器即可 taskkill /im "chrome.exe"…

Unity3d实现简单的战斗

使用u3d实现一个简单的战斗demo&#xff0c;记下学到的知识点&#xff0c;以备后查。 1.判断是否点中指定物体 if (Input.GetMouseButton(0)) {Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray, out RaycastHit hit)){//坐标转换Vector…

PeakCAN连接到WSL2 Debian

操作步骤 按照以下步骤进行操作&#xff1a; 在Windows下安装PeakCAN驱动并安装&#xff0c;地址是https://www.peak-system.com/PCAN-USB.199.0.html?&L1 在Windows下安装usbipd&#xff0c;地址是https://github.com/dorssel/usbipd-win/releases&#xff0c;最新版是…

我们是如何测试人工智能的(六)推荐系统拆解

推荐系统简介 推荐系统的问题 根据之前学习到的内容&#xff0c;我们已经基本了解到了要如何构建一个二分类模型。我们都知道模型大体可以分成&#xff0c;回归&#xff0c;二分类和多分类。但推荐系统是属于哪一种场景呢&#xff0c;比如我们常见的广告推荐或者内容推荐&…

线性代数---------学习总结

线性代数之行列式 行列式的几条重要的性质 1.某两行某两列交换位置之后&#xff0c;值变号 2.行列式转置&#xff0c;值不变 3.范德蒙德行列式&#xff0c;用不同行的公比做一系列的累乘运算 4.把某一行的行列式加到另一行上&#xff0c;利用他们之间的倍数关系&#xff0…

最小二乘圆柱拟合(高斯牛顿法)

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 本期话题&#xff1a;最小二乘圆柱拟合 相关背景资料 点击前往 圆柱拟合输入和输出要求 输入 8到50个点&#xff0c;全部采样自圆柱上。每个点3个坐标&#xff0c;坐…

云计算底层技术奥秘、磁盘技术揭秘、虚拟化管理、公有云概述

云计算基础 实验图例 虚拟化平台安装 创建虚拟机 1、创建虚拟机 2cpu&#xff0c;4G内存&#xff08;默认用户名: root 密码: a&#xff09; 2、验证 ecs 是否支持虚拟化 [rootecs ~]# grep -Po "vmx|svm" /proc/cpuinfovmx... ...[rootecs ~]# lsmod |grep kvm…

Android 13以上版本读写SD卡权限适配

如题&#xff0c;最近工作上处理的问题&#xff0c;把解决方案简单逻列出来&#xff0c;供有需要的朋友参考之 解决方案&#xff1a; 1、配置权限 <uses-permission android:name"android.permission.READ_MEDIA_IMAGES" /><uses-permission android:name&q…

Security ❀ HTTP/HTTPS逐包解析交互过程细节

文章目录 1. TCP三次握手机制2. HTTP Request 请求报文3. HTTP Response 响应报文4. SSL/TLS协议4.1. ClientHello 客户端Hello报文4.2 ServerHello 服务器Hello报文4.3. *ServerKeyExchange 服务公钥交换4.4. ClientKeyExchange 客户端公钥交换4.5. *CertificateVerify 证书验…

Mysql 更新数据

MySQL中使用UPDATE语句更新表中的记录&#xff0c;可以更新特定的行或者同时更新所有的行。基本语法结构如下&#xff1a; UPDATE table_name SET column_name1 value1,column_name2 value2,……, column_namen valuen WHERE(condition); column_name1,column_name2,……,…

Oracle数据库如何对中文的一二三四五六七八九十数进行正序排列排序

引言 在处理包含中文数字的数据库查询时&#xff0c;我们可能会遇到一个看似简单实则充满挑战的问题——如何让Oracle数据库按照阿拉伯数字顺序&#xff08;1, 2, 3, 4, 5, 6…&#xff09;对诸如“一、二、三、四、五、六…”这样的中文数字进行排序。这不仅是一个技术性问题&…

长度最小的子数组[中等]

一、题目 给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的连续子数组[numsl, numsl1, ..., numsr-1, numsr]&#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回0。 示例 1&#xff1a; 输入&#xff…

数据结构奇妙旅程之七大排序

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

如何做好阅读笔记搭建个人知识体系?

一、阅读笔记的重要性 阅读笔记在个人知识管理中扮演着重要的角色。通过记录、整理和利用阅读笔记&#xff0c;可以帮助我们更好地梳理个人知识体系&#xff0c;提高阅读效率&#xff0c;并且能够为个人成长提供有力支持。阅读笔记的重要性不言而喻&#xff0c;它是我们通过阅…

芯片替代查询指南:如何在电子设计中选择最佳替代方案

在电子制造与维修的世界里&#xff0c;芯片的选择和替代是一个常见且复杂的过程。选择正确的芯片替代对于确保电路的正常工作以及产品的性能不可或缺。本篇文章将为您提供关于芯片替代查询网站的全面指南。 什么是芯片替代查询&#xff1f; 芯片替代查询是提供芯片替代选项查…

时序数据库 Tdengine 执行命令能够查看执行的sql语句

curl是 访问6041端口&#xff0c;在windows系统里没有linux里的curl命令&#xff0c;需要用别的工具实现。我在cmd里是访问6030端口 第一步 在安装是时序数据库的服务器上也就是数据库服务端 进入命令窗口 执行 taos 第二步 执行 show queries\G;

OpenAI发布新模型!ChatGPT性能重磅提升,API大幅降价,GPT-4 「变懒」被修复

OpenAI 对ChatGPT进行了大更新&#xff1a;推出了新一代的嵌入模型&#xff0c;对GPT-4 Turbo模型进行了更新&#xff0c;并将很快对GPT-3.5 Turbo的API进行大幅降价&#xff0c;GPT-4「变懒」行为也被修复。 接下来二狗就带大家看看ChatGPT的这次详细更新。 推出新的嵌入模型…

PyQt5零基础入门(七)——文本编辑框

单行文本框控件(QLineEdit) QLineEdit是一个小部件&#xff0c;通常用于创建用户界面中的文本输入框。它提供了简单而强大的文本编辑功能&#xff0c;适用于各种需要单行文本输入的应用程序。 from PyQt5.QtWidgets import * import sysclass Window(QWidget):def __init__(s…

RK3568平台开发系列讲解(Linux系统篇)device 资源的获取

🚀返回专栏总目录 文章目录 一、platform_device 结构体二、platform_get_resource() 获取沉淀、分享、成长,让自己和他人都能有所收获!😄 一、platform_device 结构体 struct platform_driver 结构体继承了 struct device_driver 结构体, 因此可以直接访问 struct devi…

Python qt.qpa.xcb: could not connect to display解决办法

遇到问题&#xff1a;qt.qpa.xcb: could not connect to display 解决办法&#xff0c;在命令行输入&#xff1a; export DISPLAY:0 然后重新跑python程序&#xff0c;解决&#xff01; 参考博客&#xff1a;qt.qpa.xcb: could not connect to displayqt.qpa.plugin: Could …