Swagger API 文档 | SpringBoot 3.x 集成 SpringDoc

2024-04-15 07:36

本文主要是介绍Swagger API 文档 | SpringBoot 3.x 集成 SpringDoc,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 常规方式
    • 第 1 步:添加依赖
    • 第 2 步:配置 API 信息及全局参数
      • 配置 OpenAPI 文档
        • 配置单个 OpenAPI 文档 - 方式 1
        • 配置单个 OpenAPI 文档 - 方式 2
        • 配置多个 OpenAPI 文档
      • 其它 SpringDoc 及 Swagger-UI 配置
    • 第 3 步:添加 Swagger3 注解
      • Swagger2 和 Swagger3 注解对应关系
      • Swagger3 注解案例
        • Feign 客户端及其实现 Controller
        • 通用 Response 与 Account 实体类
        • 界面效果
  • 特殊方式 1:从 JavaDoc 生成 API 定义
    • 第 1 步:添加依赖
    • 第 2 步:编译项目
    • 第 3 步:添加 JavaDoc 注释
    • 第 4 步:最终效果
  • 特殊方式 2:构建时生成 JSON/YAML
  • 相关博文

😎 本节目标: SpringBoot 3.x 集成 SpringDoc(含 SpringFox 升级 SpringDoc)

  • 常规方式:添加注解方式,然后生成 API 文档及 Swagger UI 界面
  • 特殊方式 1:从 JavaDoc 读取 API 定义
  • 特殊方式 2:maven 集成测试阶段生成 API 定义

👉 版本说明

  • JDK 17
  • SpringBoot 3.2.1
  • SpringDoc 2.3.0

🚀 官方 demo:springdoc-openapi-demos-2.x.zip

常规方式

第 1 步:添加依赖

移除 SpringFox 和 Swagger2 的相关依赖,并添加 springdoc-openapi-starter-webmvc-ui 依赖:

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.3.0</version>
</dependency>

添加上述依赖后,即可访问 SwaggerUI 界面及 OpenAPI 文档。
Swagger-UI 访问效果:http://server:port/context-path/swagger-ui.html
image.png
OpenAPI 访问效果:

  • JSON 格式: http://server:port/context-path/v3/api-docs
  • YAML 格式:http://server:port/context-path/v3/api-docs.yaml

image.png

第 2 步:配置 API 信息及全局参数

上述 Swagger UI 界面中,使用的是默认的 API 信息。下面我们来自定义:

  • 添加 API 信息,比如标题、描述等
  • 添加全局请求 Token

下面有几种方式,可按需选择。

配置 OpenAPI 文档

配置单个 OpenAPI 文档 - 方式 1

在配置前,我们先了解一个特性:Swagger 中的有些注解,支持 Spring 配置解析。

  • @Info: title * description * version * termsOfService
  • @Info.license: name * url
  • @Info.contact: name * email * url
  • @Operation: description * summary
  • @Parameter: description * name
  • @ApiResponse: description
  • @OAuthFlow: openIdConnectUrl * authorizationUrl * refreshUrl * tokenUrl
  • @Schema: name * title * description,但需要设置 springdoc.api-docs.resolve-schema-properties=true

利用这个特性,我们使用如下配置文件进行自定义 API 信息及全局配置:

@OpenAPIDefinition(info = @Info(title = "${openapi.title: ${spring.application.name}} API文档",version = "${openapi.version: 0.0.1}",description = "${openapi.description:}",termsOfService = "${openapi.termsOfService:}",license = @License(name = "${openapi.license.name:}",url = "${openapi.license.url:}"),contact = @Contact(name = "${openapi.contact.name:}",email = "${openapi.contact.email:}",url = "${openapi.contact.url:}")),security = @SecurityRequirement(name = "JWT")
)
@SecurityScheme(type = SecuritySchemeType.HTTP, name = "JWT", scheme = "Bearer", in = SecuritySchemeIn.HEADER)
@Configuration
public class SpringDocConfig {}

这样,我们可以使用 openapi.title 定义 API 标题,使用 openapi.version 定义 API 版本。比如:

openapi:title: 业务服务version: v1.0.0

页面效果:
image.png此外,前面定义了安全配置,即每个请求需要在请求头中加 Bearer token。在上述页面中,显示了 Authorize 按钮,可以输入 Token 值。
image.png
后续请求,就会自动带着这个 Bearer Token:
image.png

配置单个 OpenAPI 文档 - 方式 2

换个方式,一样可以实现。可以直接构造 OpenAPI 这个对象,而不是使用注解来定义。
思路和之前一样:

  • 先定义安全 Schema:@SecurityScheme -> addSecuritySchemes
  • 然后使用组件:security = xxx -> .addSecurityItem
@Configuration
public class SpringDocConfig {@Beanpublic OpenAPI customOpenAPI(@Value("${springdoc.version:1.0.0}") String appVersion) {return new OpenAPI()// 定义组件.components(new Components().addSecuritySchemes("JWT", new SecurityScheme().in(SecurityScheme.In.HEADER).type(SecurityScheme.Type.HTTP)

这篇关于Swagger API 文档 | SpringBoot 3.x 集成 SpringDoc的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/905219

相关文章

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys