12.SpringDoc OpenAPI 功能介绍(用于生成API接口文档)

12.SpringDoc OpenAPI 功能介绍(用于生成API接口文档)

SpringDoc OpenAPI 是一个基于 OpenAPI 3.0/3.1 规范的工具,用于为 Spring Boot 应用生成 API 文档。它是 springfox(Swagger 2.x)的现代替代方案,完全支持 Spring Boot 3.x 和 JDK 17+,具有更强的兼容性和功能。


1. SpringDoc OpenAPI 核心概念

(1) OpenAPI 规范
  • OpenAPI(原 Swagger 规范)是描述 RESTful API 的行业标准,支持 API 文档、测试和客户端代码生成。
  • SpringDoc OpenAPI 自动将 Spring Boot 的控制器、模型等转换为 OpenAPI 格式,并生成交互式 UI(Swagger UI)。
(2) 与 Spring Boot 的集成
  • 自动扫描:无需手动配置,SpringDoc 会自动扫描 @RestController@RequestMapping 等注解的 API。
  • 注解支持:通过 @Operation@Tag 等注解丰富文档内容。
  • 支持现代技术栈:兼容 WebFlux、Kotlin、Jakarta EE 9+ 等。
(3) 关键组件
  • OpenAPI 对象:定义 API 的元信息(标题、描述、版本等)。
  • @Tag 注解:对 API 进行分类(如用户管理、订单管理)。
  • @Operation 注解:描述单个 API 操作(如 GET、POST)。
  • @Schema 注解:描述模型类的字段(如用户 ID、用户名)。

2. SpringDoc OpenAPI 核心知识点

(1) 依赖与版本
  • Maven 依赖
    <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.3.0</version> <!-- 最新稳定版 -->
    </dependency>
    
  • 版本选择
    • 2.x 系列支持 Spring Boot 3.x 和 OpenAPI 3.0。
    • 如果需要 OpenAPI 3.1,可以使用 springdoc-openapi-starter-webmvc-api
(2) 配置方式
  • 自动配置
    • 默认配置下,SpringDoc 会自动生成 API 文档,无需额外代码。
  • 自定义配置
    • 通过 OpenAPI 对象自定义元信息(如标题、描述)。
    • 通过 @Tag@Operation 注解补充 API 细节。
(3) 常用注解
注解作用
@Tag对 API 进行分类(如 @Tag(name = "用户管理"))。
@Operation描述单个 API 操作(如 @Operation(summary = "获取用户"))。
@Schema描述模型类的字段(如 @Schema(description = "用户ID"))。
@Parameter描述请求参数(如 @Parameter(description = "用户ID"))。
@ApiResponse描述响应状态码和内容(如 @ApiResponse(responseCode = "200"))。
(4) 执行路径
  • Swagger UI 路径
    • 默认访问:http://localhost:8080/swagger-ui.html
    • 可通过配置修改路径:
      @Bean
      public GroupedOpenApi publicApi() {return GroupedOpenApi.builder().group("public").pathsToMatch("/public/**").build();
      }
      
  • OpenAPI JSON 路径
    • 默认访问:http://localhost:8080/v3/api-docs
    • 支持分组 API 的 JSON 路径(如 /v3/api-docs/public)。

3. SpringDoc OpenAPI 的工作流程

  1. 启动应用
    • SpringDoc 自动扫描所有 @RestController@RequestMapping 注解的 API。
  2. 生成文档
    • 根据控制器、模型和注解生成 OpenAPI 3.0/3.1 格式的 JSON。
  3. 渲染 UI
    • 通过 Swagger UI 渲染交互式文档,支持测试 API。

4. 高级功能

(1) 分组 API
  • 将 API 按功能分组(如公共 API、管理员 API):
    @Bean
    public GroupedOpenApi publicApi() {return GroupedOpenApi.builder().group("public").pathsToMatch("/public/**").build();
    }
    
  • 访问分组后的 Swagger UI:
    • http://localhost:8080/swagger-ui/index.html#/public
(2) 安全性集成
  • 如果项目启用了 Spring Security,需要允许访问 Swagger UI:
    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/swagger-ui.html", "/v3/api-docs/**").permitAll().anyRequest().authenticated();}
    }
    
(3) 自定义 UI 配置
  • 修改 Swagger UI 的标题、布局等:
    @Bean
    public UIConfiguration uiConfig() {return UIConfiguration.builder().deepLinking(true).displayOperationId(false).docExpansion(DocExpansion.NONE).build();
    }
    
(4) 支持 OpenAPI 3.1
  • 使用 springdoc-openapi-starter-webmvc-api 依赖:
    <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-api</artifactId><version>2.3.0</version>
    </dependency>
    

5. 与 Spring Boot 3.x 的兼容性

  • 为什么不用 springfox
    • springfox(Swagger 2.x)依赖了已移除的 Spring MVC 组件(如 PathPatternParser),无法与 Spring Boot 3.x 兼容。
    • SpringDoc OpenAPI 是专门为 Spring Boot 3.x 和 Jakarta EE 9+ 设计的。

6. 总结

  • 优势
    • 完全兼容 Spring Boot 3.x 和 JDK 17+。
    • 支持 OpenAPI 3.0/3.1,功能更强大。
    • 无需手动配置,自动扫描 API。
  • 适用场景
    • 需要快速生成 API 文档的 Spring Boot 项目。
    • 需要支持 OpenAPI 3.0/3.1 的现代应用。
  • 对比 springfox
    • SpringDoc 是 springfox 的替代方案,推荐在新项目中使用。

通过 SpringDoc OpenAPI,可以轻松为 Spring Boot 应用生成高质量的 API 文档,并支持交互式测试。

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

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

相关文章

CentOS Linux 环境二进制方式安装 MySQL 5.7.32

文章目录 安装依赖包新建用户解压初始化配置文件启动服务登录MySQL修改密码停止数据库 安装依赖包 yum -y install libaio perl perl-devel libncurses* autoconf numactl新建用户 useradd mysql解压 tar xf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.32-l…

Webug4.0通关笔记06- 第8关CSV注入

目录 CSV注入漏洞 1.CSV漏洞简介 2.漏洞原理 &#xff08;1&#xff09;公式执行 &#xff08;2&#xff09;DDE机制 &#xff08;3&#xff09;OS命令执行 3.漏洞防御 第08关 CSV注入 1.打开靶场 2.修改源码 3.注入命令 4.导出excel表 5.打开excel表 CSV注入漏洞…

Windows和 macOS 上安装 `nvm` 和 Node.js 16.16.0 的详细教程。

Windows和 macOS 上安装 nvm 和 Node.js 16.16.0 的详细教程。 --- ### 1. 安装 nvm&#xff08;Node Version Manager&#xff09; nvm 是一个 Node.js 版本管理工具&#xff0c;可以轻松安装和切换不同版本的 Node.js。 #### Windows 安装 nvm 1. **下载 nvm 安装包**&#x…

[特殊字符] 蓝桥杯省赛全解析:含金量、获奖难度、参赛意义与发展价值全面剖析

蓝桥杯省赛刚刚落幕&#xff0c;不论你是刚参加完比赛的同学&#xff0c;还是还在观望是否值得投入时间去准备蓝桥杯的学生&#xff0c;相信你都关心&#xff1a; 蓝桥杯到底值不值得参加&#xff1f; 获奖难不难&#xff1f;含金量如何&#xff1f; 和其它算法竞赛相比有什么…

ASP.NET MVC后端控制器用模型 接收前端ajax数据为空

1、前端js代码 如下&#xff1a; const formData {DeptName: D001,Phone: 12345678900 };$.ajax({url: "/Phone/SavePhone1",type: "POST",contentType: "application/json",data: JSON.stringify(formData), //必须要JSON.stringifysuccess:…

拥抱 Kotlin Flow

1. 引言 Kotlin Flow 是 Kotlin 协程生态中处理异步数据流的核心工具&#xff0c;它提供了一种声明式、轻量级且与协程深度集成的响应式编程模型。与传统的 RxJava 相比&#xff0c;Flow 更简洁、更易于维护&#xff0c;尤其在 Android 开发中已成为主流选择。本文将从基础概念…

精益数据分析(34/126):深挖电商运营关键要点与指标

精益数据分析&#xff08;34/126&#xff09;&#xff1a;深挖电商运营关键要点与指标 在创业和数据分析的学习之旅中&#xff0c;我们都在不断探寻如何让业务更上一层楼。今天&#xff0c;我依旧带着和大家共同进步的想法&#xff0c;深入解读《精益数据分析》中电商运营的关…

Learning vtkjs之ImageCropFilter

过滤器 图片数据体积裁剪 介绍 vtkImageCropFilter可以裁剪vtkImageData。这只适用于IJK对齐的平面。 请注意&#xff0c;由于CPU限制的裁剪&#xff0c;这在大型数据集上会很慢。 效果 核心代码 需要实现这个代码主要逻辑 1、设定的crop的包围盒 其实主要是IMax IMin JM…

深入理解 C++11 delete 关键字:禁用函数的艺术

一、什么是 delete 关键字 C11 引入的 delete 关键字是一种​​显式禁用函数​​的语法机制。它允许开发者主动阻止特定函数的使用&#xff0c;比传统的私有化声明更直观、更安全&#xff0c;且能在编译期捕获更多潜在错误。 二、为什么需要 delete&#xff1f; 1. 传统方式…

深度剖析!GPT-image-1 API 开放对 AI 绘画技术生态的冲击!

4月24日凌晨&#xff0c;OpenAI正式发布了全新的图像生成模型“gpt-image-1”&#xff0c;并通过API向全球开发者开放使用&#xff0c;这意味着其GPT-4o的图像生成能力正式向开发者开放&#xff01; 在这之前&#xff0c;GPT-4o的图像生成功能于今年3月25日由 OpenAI 创始人兼 …

扣子流程图批量导入飞书多维表格

文章目录 整体结构分步骤进行处理1. 程序代码处理2. 多维表格配置 整体结构 整个代码块结构如下&#xff1a; 首先&#xff0c;我们从其他流程中拿到一个数据列表&#xff0c;通过一个循环体&#xff0c;将每一个部分的内容都通过python代码整理后&#xff0c;使用【插件】的…

【安全扫描器原理】端口扫描

【安全扫描器原理】端口扫描 1.端口扫描基本原理2.TCP扫描3.UDP扫描4.手工扫描1.端口扫描基本原理 以TCP端口为例,其原理是当一个主机向远端一个服务器的某一个端口提出建立连接的请求,如果对方有此项服务,就会同意建立连接,如果对方未安装此项服务时,则不会同意建立连接…

FastGPT部署的一些问题整理

在B站学习 图灵程序员-诸葛 的LangChain快速入门课程之《部署FastGPT构建本地应用》。在我学习课程跟着老师实践的过程中&#xff0c;踩了一些坑。这篇文章以问答的形式记录一下学习中的一些问题&#xff0c;主要面向的读者是&#xff0c;在学习同样的课程的和部署FastGPT遇到各…

如何查看k8s获取系统是否清理过docker镜像

k8s集群某个节点down掉后&#xff0c;pod就会漂移到其他节点&#xff0c;但是在该节点却又执行了拉取镜像操作&#xff0c;明明该节点之前部署过该容器的&#xff0c;不知为什么又拉取了一次镜像&#xff08;镜像拉取配置的优先使用本地&#xff09;&#xff0c;所以怀疑是触发…

聚焦智能体未来,领驭科技在微软创想未来峰会大放异彩

2025年4月23日&#xff0c;微软创想未来峰会在北京中关村国际创新中心盛大举行。作为微软中国南区核心合作伙伴及HKCSP 1T首批授权云服务商&#xff0c;深圳领驭科技有限公司受邀参会&#xff0c;携瀚鹏工业AI应用解决方案亮相峰会&#xff0c;与全球AI领袖及行业精英共话智能体…

元宇宙2.0:当区块链成为数字世界的宪法

引言&#xff1a;当虚拟世界成为“新大陆” 清晨&#xff0c;你戴上VR设备进入一个由数字建筑构成的城市&#xff0c;这里的地皮属于全球玩家&#xff0c;街边的艺术品标着NFT认证码&#xff0c;咖啡馆里的人们用加密货币支付咖啡&#xff0c;而社区规则由持有代币的居民投票决…

力扣hot100——239.滑动窗口最大值

题目链接&#xff1a; 239. 滑动窗口最大值 - 力扣&#xff08;LeetCode&#xff09; 优先级队列 优先级队列自动按照大小排序&#xff0c;队首即为最大元素&#xff0c;但取队首时要注意元素是否在滑动窗口内&#xff0c;如果不在则弹出。 class Solution { public:vector&…

Alibaba国际站商品详情AP接口概述,json数据示例返回参考

前言 Alibaba国际站商品详情API&#xff08;通常称为item_get接口&#xff09;是阿里巴巴开放平台提供的一项核心服务&#xff0c;允许开发者通过商品ID获取商品的详细信息。该接口广泛应用于电商系统集成、数据分析、竞品监控等场景&#xff0c;支持企业自动化获取商品标题、…

[论文阅读]Adversarial Semantic Collisions

Adversarial Semantic Collisions Adversarial Semantic Collisions - ACL Anthology Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP) 对抗样本是相似的输入但是产生不同的模型输出&#xff0c;而语义冲突是对抗样本的逆…

25【干货】在Arcgis中根据字段属性重新排序并自动编号的方法(二)

上一篇关于属性表自动编号的文章因为涉及到代码&#xff08;【干货】在Arcgis中根据字段属性重新排序并自动编号的方法&#xff08;一&#xff09;&#xff09;&#xff0c;担心大家有些东西确实不熟悉&#xff0c;今天就更新一篇不需要代码也能达到这个目的的方法。主要的思路…