spring-boot3.x整合Swagger 3 (OpenAPI 3) +knife4j

news2024/9/20 22:54:36

1.简介

        OpenAPI阶段的Swagger也被称为Swagger 3.0。在Swagger 2.0后,Swagger规范正式更名为OpenAPI规范,并且根据OpenAPI规范的版本号进行了更新。因此,Swagger 3.0对应的就是OpenAPI 3.0版本,它是Swagger在OpenAPI阶段推出的一个重要版本。与前几个版本相比,Swagger 3.0更加强调对RESTful API的支持和规范化,提供了更丰富和灵活的定义方式,并且可以用于自动生成文档、客户端代码、服务器代码和测试工具等。

1.1 Open API

        OpenApi是业界真正的 api 文档标准,其是由 Swagger 来维护的,并被linux列为api标准,从而成为行业标准。

OpenAPI 3 Library for spring-boot (springdoc.org)

1.2 Swagger

        swagger 是一个 api 文档维护组织,后来成为了 Open API 标准的主要定义者

1.3 SpringFox

SpringFox 是一个成熟且广泛使用的库,它允许你通过注解描述 API 并生成符合 OpenAPI 规范(原 Swagger 规范)的文档。SpringFox 支持 Swagger 2.0 及其后继者 OpenAPI 3.0。

特点:

  • 支持 Swagger 2.0 和 OpenAPI 3.0。
  • 通过使用 Swagger 注解(如 @Api@ApiOperation@ApiModel@ApiModelProperty 等)来描述 API。
  • 提供了多种方式来自定义文档,包括通过代码或配置文件。
  • 可以通过扫描类路径中的控制器类自动生成文档。
  • 更新频率较低,最近几年维护活动减少。

1.4 SpringDoc

OpenAPI 3 Library for spring-boot (springdoc.org)

SpringDoc 是一个相对较新的替代方案,它专为 OpenAPI 3.0 设计,提供了对最新 OpenAPI 规范的全面支持。

特点:

  • 主要关注 OpenAPI 3.0,对 OpenAPI 3.0 的支持更全面。
  • 使用更简洁的注解(如 @Tag@Operation@Parameter 等)来描述 API。
  • 更好的支持 Spring WebFlux,适合现代的响应式编程模型。
  • 更频繁的更新和活跃的社区支持。
  • 与 Spring Boot 的集成更加紧密,可以通过 Spring Boot 的自动配置特性简化设置过程。

1.5 Knife4j

        Knife4jInsight(简单、方便的OpenAPI接口文档私有化聚合平台),地址:http://knife4j.neticon-default.png?t=N7T8http://knife4j.net/

1.6 Swagger 3 (OpenAPI 3) 与swagger 2 区别

1.7 Swagger 3 (OpenAPI 3)注解详细介绍

(1)基本信息注解描述位置属性

@OpenAPIDefinition

用于定义整个 API 文档的基本信息。类、接口
  • info:指定 @Info 注解的对象,用于描述 API 文档的基本信息。

@Info

用于定义 API 文档的基本信息类、接口。
  • title:API 的标题。
  • description:API 的描述。
  • version:API 的版本号。
  • termsOfService:服务条款的 URL。
  • contact:指定 @Contact 注解的对象,用于描述联系人信息。
  • license:指定 @License 注解的对象,用于描述许可证信息。

@Contact

用于定义 API 文档中的联系人信息。类、接口
  • name:联系人的名称。
  • url:联系人的网址。
  • email:联系人的电子邮件地址。

@License

用于定义 API 文档中的许可证信息类、接口。
  • name:许可证的名称。
  • url:许可证的网址。
(2)分组注解描述位置属性

@Tag

用于给 API 分组,用途类似于为 API 文档添加标签。方法、类、接口
  • name:分组的名称。
(3)请求方法注解描述位置属性

@Operation

用于描述 API 的操作。方法。
  • summary:操作的摘要信息。
  • description:操作的详细描述。
  • tags:指定 @Tag 注解的对象数组,用于将操作归类到特定的分组。
  • parameters:指定 @Parameter 注解的对象数组,用于描述操作的输入参数。
  • responses:指定 @ApiResponse 注解的对象数组,用于描述操作的响应结果。
  • requestBody:指定 @RequestBody 注解的对象,用于描述操作的请求体。

@Parameter

用于描述操作的输入参数。方法
  • name:参数的名称。
  • in:参数的位置,可以是 pathqueryheadercookie 中的一种。
  • description:参数的描述。
  • required:参数是否必需,默认为 false
  • schema:指定 @Schema 注解的对象,用于描述参数的数据类型。

@RequestBody

用于描述操作的请求体方法
  • required:请求体是否必需,默认为 false
  • content:指定 @Content 注解的对象数组,用于描述请求体的内容。

@ApiResponse

用于描述操作的响应结果方法
  • responseCode:响应的状态码。
  • description:响应的描述。
  • content:指定 @Content 注解的对象数组,用于描述响应的内容。

@Content

用于描述请求体或响应的内容方法。
  • mediaType:内容的媒体类型。
  • schema:指定 @Schema 注解的对象,用于描述内容的数据类型。

@Schema

用于描述数据模型的属性。方法、类、接口。
  • title:数据模型的标题。
  • description:数据模型的描述。
  • type:数据模型的类型。
  • format:数据模型的格式。
(4)路径注解描述位置属性

@Path

用于定义路径参数。方法
  • value:路径参数的名称。

@PathVariable

用于描述路径参数。方法的参数
  • value:路径参数的名称。

@RequestParam

用于描述查询参数。方法的参数。
  • value:查询参数的名称。
  • required:查询参数是否必需,默认为 false

@RequestBody

用于描述请求体。方法的参数
(5) 响应注解描述位置属性

@ApiResponse

用于描述响应结果。方法。
  • responseCode:响应的状态码。
  • description:响应的描述。
  • content:指定 @Content 注解的对象数组,用于描述响应的内容。

@Content

用于描述响应结果的内容方法
  • mediaType:内容的媒体类型。
  • schema:指定 @Schema 注解的对象,用于描述内容的数据类型。

@Schema

用于描述数据模型的属性。方法、类、接口。
  • title:数据模型的标题。
  • description:数据模型的描述。
  • type:数据模型的类型。
  • format:数据模型的格式。

 2. 配置Knife4j

2.1 添加依赖

        因为Knife4j提供的starter已经引用springdoc-openapi的jar,开发者需注意避免jar包冲突。这里直接使用Knife4j

<dependency>
     <groupId>com.github.xiaoymin</groupId>
     <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
     <version>4.4.0</version>
</dependency>

2.2 添加配置类

package com.zsh.test.swagger3test.config;

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.Contact;
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.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.configuration.SpringDocConfiguration;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Collections;

/**Knife4j整合swagger3
 * @author ZhaoShuhao
 * @data 2024/7/21 11:06
 */
@Configuration
public class OpenApiConfig {
    @Bean
    public OpenAPI springShopOpenApi() {
        return new OpenAPI()
                // 接口文档标题
                .info(new Info().title("swagger3")
                        // 接口文档简介
                        .description("这是基于Knife4j OpenApi3的测试接口文档")
                        // 接口文档版本
                        .version("1.0版本")
                        // 开发者联系方式
                        .contact(new Contact().name("zsh")
                                .email("1401969521@qq.com")));

    }
}

2.3 yml配置

springdoc:
  swagger-ui:
    path: /swagger-ui.html
    tags-sorter: alpha
    operations-sorter: alpha
  api-docs:
    path: /v3/api-docs
  group-configs:
    - group: 'zsh'
      paths-to-match: '/**'
      #生成文档所需的扫包路径,一般为启动类目录
      packages-to-scan: com.zsh.test.swagger3test


#knife4j配置
knife4j:
  #是否启用增强设置
  enable: true
  #开启生产环境屏蔽
  production: false
  #是否启用登录认证
  basic:
    enable: true
    username: admin
    password: 123456
  setting:
    language: zh_cn
    enable-version: true
    enable-swagger-models: true
    swagger-model-name: 用户模块

2.4 运行结果

路径:http://localhost:8080/doc.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

试过可道云teamOS的权限管理,才知道团队协作可以这么顺

在快节奏的工作环境中&#xff0c;团队协作的顺畅与否往往决定了项目的成败。作为团队中的一员&#xff0c;我深知权限管理在团队协作中的重要性。 我们的团队在协作过程中总是被权限问题所困扰。文件共享、资料访问、任务分配……每一个环节都需要小心翼翼地处理权限设置&…

学术研讨 | 区块链与隐私计算领域专用硬件研讨会顺利召开

学术研讨 近日&#xff0c;国家区块链技术创新中心主办&#xff0c;长安链开源社区支持的“区块链与隐私计算领域专用硬件研讨会”顺利召开&#xff0c;会议围绕基于区块链与隐私计算的生成式AI上链、硬件加速、软硬协同等主题展开讨论&#xff0c;来自复旦大学、清华大学、北京…

主题公园- 海豹主题式风格餐厅设计【AIGC应用】

业务背景&#xff1a;海洋馆针对细分客群增设一个打卡主题点位&#xff0c;以海豹主题式餐厅为打卡卖点&#xff0c;效果参见海豹主题式风格。 AIGC概念图制作平台&#xff1a;&#xff08;可灵&#xff09; https://klingai.kuaishou.com/ 关键词&#xff1a; 海豹主题餐厅…

机器学习 | 回归算法原理——随机梯度下降法

Hi&#xff0c;大家好&#xff0c;我是半亩花海。接着上次的多重回归继续更新《白话机器学习的数学》这本书的学习笔记&#xff0c;在此分享随机梯度下降法这一回归算法原理。本章的回归算法原理还是基于《基于广告费预测点击量》项目&#xff0c;欢迎大家交流学习&#xff01;…

Python 教程(二):语法与数据结构

目录 前言专栏列表语法特点实例代码基本数据类型变量命名规则赋值动态类型作用域示例代码 运算符list、set和dict 数据结构 区别1. list&#xff08;列表&#xff09;2. set&#xff08;集合&#xff09;3. dict&#xff08;字典&#xff09; 总结 前言 Python 是一种计算机编…

HarmonyOS实现跨语言交互(Node-API)

Node-API简介 通过Native接口&#xff0c;实现两种代码的交互。 是在Node.js提供的Node-API基础上扩展而来&#xff0c;但与Node.js中的Node-API不完全兼容。本质就是提供了对C/C代码的使用接口&#xff0c;使得两种代码共同工作。规范I/O、CPU密集型、OS底层等能力。 应用场景…

Python | Leetcode Python题解之第264题丑数II

题目&#xff1a; 题解&#xff1a; class Solution:def nthUglyNumber(self, n: int) -> int:dp [0] * (n 1)dp[1] 1p2 p3 p5 1for i in range(2, n 1):num2, num3, num5 dp[p2] * 2, dp[p3] * 3, dp[p5] * 5dp[i] min(num2, num3, num5)if dp[i] num2:p2 1if …

pytest的安装和介绍和 Exit Code 含义

pytest 准备工作&#xff08;在cmd里&#xff09;&#xff1a; 1安装 pip install -U pytest2验证安装 pytest --version # 会展示当前已安装版本3其他的 显示可用的内置函数参数 pytest --fixtures通过命令行查看帮助信息及配置文件选项 pytest --help一、pytets框架中的…

Windows安装go语言开发环境

一、下载安装包 安装包下载地址 下载完毕后双击进行安装。 查看是否安装成功&#xff1a; go version #查看go版本 go env #查看go环境变量正常显示则安装完成。 二、安装vscode 一般开发go语言项目使用vscode工具&#xff1a; 下载地址 下载完毕后双击进行安装。 三…

FPGA开发——D触发器的设计

1、概述 锁存器和触发器有时组合在一起&#xff0c;因为它们都可以在其输出上存储一位&#xff08;1或0&#xff09;。与锁存器相比&#xff0c;触发器是需要时钟信号&#xff08;Clk&#xff09;的同步电路。D 触发器仅在时钟从0 到 1&#xff08;上升沿&#xff09;或 1 到 …

python—NumPy基础(3)

文章目录 算术函数算术函数的使用算术函数中out参数的使用mod()函数的使用 统计函数power()函数的使用median ()函数的使用mean ()函数的使用函数的使用 其他常用函数tile()和repeat()函数的使用roll()函数的使用resize()函数的使用replace()和put()函数的使savetxt()和loadtxt…

可视挖耳勺的正确使用方法:四款宝藏单品,等你来挑选!

现在很多人都关注自己的个护健康&#xff0c;越来越多人开始使用可视挖耳勺。传统挖耳勺很有可以清洁不干净&#xff0c;导致耳耵聍堆积在耳道深处&#xff0c;引起耳朵发炎甚至感染。可视挖耳勺可以在看见耳道内部的情况下精准挖出耳耵聍&#xff0c;一定程度上安全又有效。但…

git命令使用详细介绍

1 环境配置 设置的信息会保存在~/.gitconfig文件中 查看配置信息 git config --list git config user.name设置用户信息 git config --global user.name "有勇气的牛排" git config --global user.email “1809296387qq.com”2 获取Git仓库 2.1 本地初始化一个仓…

Apache压测工具ab(Apache Bench)工具的下载安装和使用示例

场景 Jmeter进行http接口压力测试&#xff1a; Jmeter进行http接口压力测试_接口压测两万量-CSDN博客 上面讲压测工具Jmeter的使用&#xff0c;下面介绍另外一个ab(Apache Bench)压测工具的使用。 apache bench apache bench是apache自带的压力测试工具。 ab不仅可以对ap…

HTML开发笔记:3.图形化开发软件与模版网站

一、Google Web Designer 下载网址&#xff1a;webdesigner.withgoogle.com&#xff08;得挂梯子&#xff09; 可以编辑文字 可以插入图片&#xff0c;快捷键是ctrlshiftI 右侧“大纲”属性中可以调节大小 可以点击右上角在浏览器中预览效果&#xff1a; 二、模版网站 https://…

前端学习3——自学习梳理

1.学习一下盒子模型(盒子就是元素&#xff0c;标签) 盒子模型又分为4种&#xff1a;块级&#xff0c;内联级&#xff0c;内联块级&#xff0c;弹性盒子 (弹性盒子续在下一节) 2.元素的结构 1.盒子模型 <!DOCTYPE html> <html lang"en"> <head>&l…

《Java初阶数据结构》----5.<二叉树的概念及使用>

前言 大家好&#xff0c;我目前在学习java。之前也学了一段时间&#xff0c;但是没有发布博客。时间过的真的很快。我会利用好这个暑假&#xff0c;来复习之前学过的内容&#xff0c;并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

mysql定时备份

为什么写这篇文章 最近项目里面需要定时备份mysql的数据&#xff0c;网上找了下&#xff0c;找到了一些比较好的解决方案。但是发现有几个地方与自己不匹配&#xff0c;我期望有如下 备份过程不能锁表&#xff0c;网上很多都是会锁表备份定时任务无法执行&#xff0c;但是手动…

CTF ssrf 基础入门 (一)

0x01 引言 我发现我其实并不是很明白这个东西&#xff0c;有些微妙&#xff0c;而且记忆中也就记得Gopherus这个工具了&#xff0c;所以重新学习了一下&#xff0c;顺便记录一下吧 0x02 辨别 我们拿到一个题目&#xff0c;他的名字可能就是题目类型&#xff0c;但是也有可能…