11.Spring Boot 3.1.5 中使用 SpringDoc OpenAPI(替代 Swagger)生成 API 文档

Spring Boot 3.1.5 中使用 SpringDoc OpenAPI(替代 Swagger)生成 API 文档


1. 项目结构

假设项目名为 springboot-openapi-demo,以下是项目的基本结构:

springboot-openapi-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── demo/
│   │   │               ├── DemoApplication.java        # 主启动类
│   │   │               ├── config/                     # 配置类目录
│   │   │               │   └── OpenApiConfig.java      # OpenAPI 配置类
│   │   │               ├── controller/                 # 控制器目录
│   │   │               │   └── UserController.java     # 示例控制器
│   │   │               └── model/                      # 模型类目录
│   │   │                   └── User.java               # 用户模型类
│   │   └── resources/
│   │       └── application.properties                 # 配置文件
└── pom.xml                                             # Maven 依赖配置

2. 创建 pom.xml 并添加依赖

pom.xml 中添加 Spring Boot 和 SpringDoc OpenAPI 的依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.5</version><relativePath/> <!-- 查找父 POM 的位置 --></parent><groupId>com.example</groupId><artifactId>springboot-openapi-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-openapi-demo</name><description>Spring Boot 3.1.5 + SpringDoc OpenAPI 示例</description><properties><java.version>17</java.version> <!-- 指定 JDK 17 --><springdoc-openapi.version>2.3.0</springdoc-openapi.version> <!-- SpringDoc 版本 --></properties><dependencies><!-- Spring Boot Web 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- SpringDoc OpenAPI UI 依赖(用于生成 Swagger UI) --><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>${springdoc-openapi.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

3. 创建主启动类 DemoApplication.java

src/main/java/com/example/demo/DemoApplication.java 中创建主启动类:

package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** Spring Boot 主启动类* 用于启动整个应用*/
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

在这里插入图片描述

4. 创建 OpenAPI 配置类 OpenApiConfig.java

src/main/java/com/example/demo/config/OpenApiConfig.java 中配置 OpenAPI:

package com.example.demo.config;import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** OpenAPI 配置类* 用于自定义 API 文档的元信息(如标题、描述、版本等)*/
@Configuration
public class OpenApiConfig {/*** 自定义 OpenAPI 实例* @return 配置好的 OpenAPI 对象*/@Beanpublic OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("Spring Boot 3.1.5 API 文档") // API 文档标题.description("这是一个使用 SpringDoc OpenAPI 生成的示例 API 文档") // 描述.version("1.0") // 版本号.license(new License() // 许可证信息.name("Apache 2.0") // 许可证名称.url("https://www.apache.org/licenses/LICENSE-2.0"))); // 许可证 URL}
}

在这里插入图片描述

对应效果:
在这里插入图片描述

5. 创建用户模型类 User.java

(/swagger-ui/index.html和/v3/api-docs里都没看到这个类里的的信息,后面有需要可以研究研究)

src/main/java/com/example/demo/model/User.java 中创建用户模型类:

package com.example.demo.model;import io.swagger.v3.oas.annotations.media.Schema;/*** 用户实体类* 用于表示用户的基本信息*/
@Schema(description = "用户实体") // 描述该类的用途
public class User {@Schema(description = "用户 ID", example = "1") // 描述字段的用途和示例值private Long id;@Schema(description = "用户名", example = "john_doe")private String username;// Getters 和 Setterspublic Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}
}

在这里插入图片描述

6. 创建用户控制器 UserController.java

src/main/java/com/example/demo/controller/UserController.java 中创建用户控制器:

package com.example.demo.controller;import com.example.demo.model.User;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;/*** 用户管理控制器* 提供用户相关的 RESTful API*/
@RestController
@RequestMapping("/api/users") // 基础路径
@Tag(name = "用户管理", description = "用户相关的 API 接口") // 分类标签
public class UserController {/*** 根据用户 ID 获取用户信息* @param id 用户 ID* @return 用户信息字符串*/@GetMapping("/{id}")@Operation(summary = "获取用户信息", description = "根据用户 ID 获取用户详情") // 操作描述public String getUser(@PathVariable Long id) {return "User ID: " + id;}/*** 创建新用户* @param userData 用户数据(示例中为字符串,实际应为 User 对象)* @return 创建结果*/@PostMapping@Operation(summary = "创建用户", description = "创建新用户") // 操作描述public String createUser(@RequestBody String userData) {return "Created user: " + userData;}
}

在这里插入图片描述
在这里插入图片描述

对应效果:
在这里插入图片描述

7. 配置 application.properties

src/main/resources/application.properties 中添加基本配置:
F

# 应用名称
spring.application.name=springboot-openapi-demo# 服务器端口
server.port=8080# 日志配置(可选)
logging.level.org.springframework=INFO

在这里插入图片描述

8. 启动应用并访问 Swagger UI

  1. 启动 DemoApplication 主类。
  2. 访问以下 URL 查看 Swagger UI:
    • http://localhost:8080/swagger-ui.html(SpringDoc 默认路径)
    • http://localhost:8080/v3/api-docs(查看原始 OpenAPI 3.0 JSON)
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

9. 代码注释说明

  • 类注释
    • 描述类的用途(如 User 类表示用户实体)。
  • 方法注释
    • 描述方法的功能、参数和返回值(如 getUser 方法根据 ID 获取用户)。
  • 注解注释
    • 解释注解的作用(如 @Tag 用于分类 API,@Operation 用于描述操作)。
  • 配置类注释
    • 解释配置的作用(如 OpenApiConfig 用于自定义 API 文档的元信息)。

10. 总结

  • 依赖:使用 springdoc-openapi-starter-webmvc-ui 替代 springfox
  • 配置:通过 OpenApiConfig 自定义 API 文档信息。
  • 注解:使用 @Tag@Operation 等注解丰富 API 文档。
  • 启动:访问 http://localhost:8080/swagger-ui.html 查看文档。

这种方式完全兼容 Spring Boot 3.1.5 和 JDK 17,且功能强大、易于维护。

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

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

相关文章

python入门(1)变量与输入输出

一、变量 使用规则 变量名值例子 a13变量名规则 变量名可以用大小写字母、数字、下划线。 数字、下划线不可开头 例子 name name1 1name name_first _first 二、输入输出 输出print print(*objects,sep"",end"\n") objects:多个要输出的值 sep:每个…

TS 安装

TS较JS优势 1 TS静态类型编程语言。编译时发现错误 2 类型系统 强化变量类型概念 3 支持新语法 4 类型推断机制 可以和React框架中的各种hook配合 5 任何地方都有代码提示 tsc 命令 将TS转为JS 1 tsc 文件.ts 生成 js文件 2 执行JS代码

Linux-常用监控工具

以下是对 Linux 系统中常用监控工具&#xff08;netstat、ss、dmesg&#xff09;的系统性介绍&#xff0c;涵盖其核心功能、典型用法及实际应用场景&#xff0c;帮助您分析系统状态和内核参数调整后的效果&#xff1a; 1. netstat -s&#xff1a;网络协议栈统计监控 功能 net…

Linux系统:详解文件描述符与重定向原理以及相关接口(open,read,write,dup2)

本节重点 从狭义与广义角度理解文件理解文件描述符掌握open,write,read系统调用理解重定向的概念与原理掌握重定向的指令操作stdout与stderr的比较为什么存在stderr&#xff1f; 一、理解“文件” 1.1 狭义角度 在狭义层面&#xff0c;Linux文件是磁盘或存储设备上连续或分…

美国市场变局:沃尔玛95%覆盖率的3个流量入口重构策略

过去几年&#xff0c;美国零售市场经历了极大的变化。电商发展迅猛&#xff0c;加上疫情影响&#xff0c;消费者购物习惯出现转向。而作为美国零售巨头&#xff0c;沃尔玛&#xff08;Walmart&#xff09;凭借高达95%的线下覆盖率&#xff0c;始终是品牌和卖家不可忽视的渠道。…

一文详解 Linux下的开源打印系统CUPS(Common UNIX Printing System)

文章目录 前言一、CUPS 简介二、CUPS 常用指令解析2.1 安装 CUPS2.2 启动/重启服务2.3 添加打印机&#xff08;核心操作&#xff09;2.4 设置默认打印机2.5 打印文件2.6 查看打印任务2.7 取消打印任务2.8 查看、移除已添加的打印机 三、调试与常见问题3.1 日志查看3.2 驱动问题…

React useCallback函数

应用场景&#xff1a;父组件向子组件传递函数类型的props时

python 桌面程序开发简述及示例

Python桌面程序开发简述及示例 Python凭借其简洁的语法和丰富的库支持,非常适合开发跨平台的桌面应用程序。本文将介绍Python桌面开发的主要方法,并提供实际代码示例。 一、Python桌面开发主要方法 1.1 Tkinter(标准库) Python内置的GUI库,适合开发简单桌面应用 1.2 …

数字智慧方案5875丨智慧交通枢纽综合解决方案(43页PPT)(文末有下载方式)

篇幅所限&#xff0c;本文只能提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/2301_78256053/89575708 资料解读&#xff1a;智慧交通枢纽综合解决方案 详细资料请看本解读文章的最后内容。 随着城市化进程的加速和交通需求的不断增…

企业级分布式 MCP 方案

飞书原文档链接地址&#xff1a;https://ik3te1knhq.feishu.cn/wiki/D8kSwC9tFi61CMkRdd8cMxNTnpg 企业级分布式 MCP 方案 [!TIP] 背景&#xff1a;现阶段 MCP Client 和 MCP Server 是一对一的连接方式&#xff0c;若当前 MCP Server 挂掉了&#xff0c;那么 MCP Client 便不…

【AI提示词】奥卡姆剃刀思维模型专家

提示说明 一位专注于奥卡姆剃刀思维模型的专业人士&#xff0c;擅长将简洁性原则应用于复杂问题的分析与解决。 提示词 # Role: 奥卡姆剃刀思维模型专家## Profile - language: 中文 - description: 一位专注于奥卡姆剃刀思维模型的专业人士&#xff0c;擅长将简洁性原则应用…

2.1 行列式

引言 行列式是线性代数的核心工具&#xff0c;贯穿矩阵运算、特征值计算与微分方程求解。本文系统梳理2.1节核心考点&#xff0c;结合公式速查与典型例题&#xff0c;助你高效突破行列式难点&#xff01; 考点一&#xff1a;数值型行列式计算 1️⃣ 行列式的定义 (1) 定义方…

单词规律(简单)

思路和同构字符串那道题一样。、但是这道题要注意的地方就是&#xff0c;检查 pattern 和 s 的单词数量是否一致以及在进行字符串比较的时候应该用equals来进行比较&#xff0c;而不能用“&#xff01;”&#xff0c;“&#xff01;”比较的是对象引用而非内容。 class Soluti…

【C++】认识map和set

目录 前言&#xff1a; 一&#xff1a;认识map和set 二&#xff1a;map和set的使用 1.set的使用 2.map的使用 三&#xff1a;map的insert方法返回值 四&#xff1a;map的[ ]的使用 五&#xff1a;multiset和multimap 六&#xff1a;map和set的底层数据结构 七&#x…

Mybatis中的一级二级缓存扫盲

思维导图&#xff1a; MyBatis 提供了一级缓存和二级缓存机制&#xff0c;用于提高数据库查询的性能&#xff0c;减少对数据库的访问次数。&#xff08;本质上是减少IO次数&#xff09;。 一级缓存 1. 概念 一级缓存也称为会话缓存&#xff0c;它是基于 SqlSession 的缓存。在同…

uniapp 实现低功耗蓝牙连接并读写数据实战指南

在物联网应用场景中&#xff0c;低功耗蓝牙&#xff08;BLE&#xff09;凭借其低能耗、连接便捷的特点&#xff0c;成为设备间数据交互的重要方式。Uniapp 作为一款跨平台开发框架&#xff0c;提供了丰富的 API 支持&#xff0c;使得在多个端实现低功耗蓝牙功能变得轻松高效。本…

OpenSSL应用实践:嵌入式数据安全实战指南

文章目录 OpenSSL应用实践:嵌入式数据安全实战指南一、嵌入式安全现状与OpenSSL适配方案1.1 嵌入式安全挑战1.2 OpenSSL精简方案二、开发环境搭建2.1 交叉编译工具链2.2 OpenSSL交叉编译三、核心功能实现3.1 AES-GCM加密实践四、实战项目:安全OTA升级4.1 系统架构4.2 关键代码…

harmonyOS 手机,双折叠,平板,PC端屏幕适配

由于HarmonyOS设备的屏幕尺寸和分辨率各不相同&#xff0c;开发者需要采取适当的措施来适配不同的屏幕。 1.EntryAbility.ets文件里&#xff1a;onWindowStageCreate方法里判断设备类型&#xff0c; 如果是pad&#xff0c;需全屏展示&#xff08;按客户需求来&#xff0c;本次…

跟韩学AiOps系列之2025学MySQL系列_如何在MySQL中开启和提交事务?!

跟韩学AiOps系列之2025学MySQL系列_如何在MySQL中开启和提交事务&#xff1f;! 文章目录 一、事务的基本操作1. 开启事务2. 执行事务内操作3. 提交事务4. 回滚事务 二、验证示例&#xff08;适用于 MySQL 5.7&#xff09;步骤 1&#xff1a;准备测试表和数据步骤 2&#xff1a…

Java生成微信小程序码及小程序短链接

使用wx-java-miniapp-spring-boot-starter 生成微信小程序码及小程序短链接 在pom.xml文件中引入依赖 <dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-miniapp-spring-boot-starter</artifactId><version>4.7…