Springfox、Swagger 和 Springdoc
Springfox、Swagger 和 Springdoc 是用于在 Spring Boot 项目中生成 API 文档的工具,但它们之间有显著的区别和演进关系:
1. Swagger
简介
- Swagger 是一个开源项目,旨在为 RESTful APIs 提供交互式文档。
- 最早由 SmartBear 开发,后来演进为 OpenAPI 规范 的前身。
- Swagger 的核心组件包括:
- Swagger UI:提供交互式的 Web 界面,展示 API 端点并允许直接调用测试。
- Swagger Editor:编写和查看 OpenAPI 描述文件的工具。
- Swagger Codegen:基于 API 描述文件生成客户端和服务端代码。
与 Spring 的关系
- Swagger 本身不依赖 Spring,但通过扩展工具(如 Springfox)使其在 Spring 框架中得到使用。
2. Springfox
简介
- Springfox 是一个专门为 Spring Boot 集成 Swagger 的库。
- 核心功能:扫描 Spring 项目中的注解和配置,生成基于 Swagger 的 API 文档。
- 特点:
- 支持 Spring MVC 和 Spring WebFlux。
- 使用
@ApiOperation和@ApiModel等注解来生成文档。 - 支持 Swagger 2 和部分 OpenAPI 3 特性。
现状
- 停止活跃维护:Springfox 项目在 2021 年后维护频率大幅降低,社区对它的支持逐渐减少。
- 兼容性问题:
- 与 Spring Boot 2.6.x 和更高版本存在兼容性问题,主要是因为 Springfox 使用的
RequestMappingHandlerMapping被 Spring Framework 的 Web 模块改动影响。
- 与 Spring Boot 2.6.x 和更高版本存在兼容性问题,主要是因为 Springfox 使用的
何时使用
- 如果项目是基于 Spring Boot 2.5.x 或更早版本,并且已经使用了 Springfox,可以暂时保留。
- 对于新项目,不建议继续使用 Springfox。
3. Springdoc
简介
- Springdoc 是一个现代化工具,基于 OpenAPI 3 规范设计,替代 Springfox。
- 提供与 Spring Boot 的无缝集成:
- 自动生成 OpenAPI 3 文档。
- 提供嵌入式的 Swagger UI(无需单独配置)。
- 兼容 Spring MVC 和 Spring WebFlux。
优点
- 强大兼容性:
- 与 Spring Boot 2.x 和 3.x 完美兼容。
- 支持 Spring Framework 的最新功能,例如响应式流和新注解模型。
- 零配置:
- 大部分功能开箱即用,减少了复杂的注解和配置需求。
- 社区活跃:
- 相比 Springfox,Springdoc 项目更活跃,持续发布新版本,解决社区反馈。
使用方式
- 添加 Maven 依赖:
<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>最新版本</version> </dependency> - 启用后,访问默认路径
http://localhost:8080/swagger-ui.html。
总结:它们的关系与选择
| 工具 | 关系 | 适用场景 | 当前建议 |
|---|---|---|---|
| Swagger | 基础规范和工具 | 原始工具,用于标准化 API 文档 | 用于 OpenAPI 标准支持 |
| Springfox | Swagger 的 Spring 集成实现 | 传统项目(Spring Boot 2.5.x) | 不再推荐,已过时 |
| Springdoc | 基于 OpenAPI 3 的现代化替代工具 | 新项目,支持最新的 Spring Boot | 强烈推荐 |
迁移建议:从 Springfox 到 Springdoc
如果你当前使用 Springfox,但需要升级 Spring Boot 或改进文档支持,可以迁移到 Springdoc:
-
替换依赖:
- 移除
springfox-swagger2和springfox-swagger-ui。 - 添加
springdoc-openapi-ui。
- 移除
-
注解适配:
- Springdoc 支持 OpenAPI 3 的注解,通常是标准的 JSR-303 和 Spring 注解。
- 替换
@ApiOperation为@Operation,替换@ApiModel为标准注解。
-
配置改动:
- Springdoc 几乎不需要额外配置,大部分文档生成会自动完成。
结论:对于新项目,推荐使用 Springdoc;对于维护中的老项目,可以逐步迁移到 Springdoc,以便享受最新功能和更好的兼容性。
相关文章:
Springfox、Swagger 和 Springdoc
Springfox、Swagger 和 Springdoc 是用于在 Spring Boot 项目中生成 API 文档的工具,但它们之间有显著的区别和演进关系: 1. Swagger 简介 Swagger 是一个开源项目,旨在为 RESTful APIs 提供交互式文档。最早由 SmartBear 开发,…...
编程基础篇
什么是编程? 原文地址 :样式不太熟悉,有点单一,原文地址 一千个人眼中有一千个哈姆雷特,以下是我眼中的编程: A每天出门需要关一下空调,在家喜欢室内温度在 20左右,6 点左右会打开灯…...
GPT视角下,如何在密码学研究中找到属于你的方向?
(本文所有内容由GPT生成)在密码学领域发现关键性的研究方向并成为一位优秀的密码学研究员,需要结合对领域趋势的洞察、扎实的理论基础以及创新的研究思维。以下是具体步骤和方法: 一、发现关键性研究方向 关注领域前沿动态 顶级会…...
【经典】星空主题的注册界面HTML,CSS,JS
目录 界面展示 完整代码 说明: 这是一个简单的星空主题的注册界面,使用了 HTML 和 CSS 来实现一个背景为星空效果的注册页面。 界面展示 完整代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&…...
Linux学习——4_WEB服务器的部署及优化
WEB服务器的部署及优化 用户常用关于web信息 什么是www www是world wide web的缩写,即万维网,也就是全球信息广播 通常说的上网就是使用www来查询用户所需要的信息。 www可以结合文字、图形、影像以及声音等多媒体,超链接的方式将信息以…...
《Vue 组件化开发:构建可复用的模块》
一、Vue 组件化开发概述 组件化是 Vue.js 的核心概念之一,它允许将界面拆分成独立、可复用的组件,使得开发大型应用变得更加简单和高效。 组件的定义是实现应用中局部功能代码和资源的集合。Vue.js 的组件化用于将 UI 页面分割为若干组件进行组合和嵌套…...
贪心算法理论
系列博客目录 文章目录 系列博客目录贪心算法 (Greedy Algorithm)贪心算法的特点贪心算法的适用条件常见的贪心算法问题贪心算法的步骤贪心算法示例:活动选择问题贪心算法的优缺点 贪心算法 (Greedy Algorithm) 贪心算法是一种在每一步选择中都采取当前状态下最优的…...
JVM之Synthetic
Synthetic是人造,合成的意思,在虚拟机很多地方使用ACC_SYNTHETIC表示编译器自动生成的,区别于我们自己写的程序代码。这样说可能比较模糊,我们举个例子:我们创建一个内部类,如下 public class TestInnerCl…...
HCIE IGP双栈综合实验
实验拓扑 实验需求及解法 本实验模拟ISP网络结构,R1/2组成国家骨干网,R3/4组成省级网络,R5/6/7组成数据中 心网络。 配置所有ipv4地址,请自行测试直连。 R1 sysname R1 interface GigabitEthernet0/0/0ip address 12.1.1.1 255.…...
【k8s】监控metrics-server
metrics-server介绍 Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。Metric server从每个节点上KubeletAPI收集指标,通过Kubernetes聚合器注册在Master APIServer中。为集群提供Node、Pods资源利用率指标。 就像Linux 系统一样…...
第六届国际科技创新学术交流会暨管理科学信息化与经济创新发展(MSIEID 2024)
重要信息 大会官网:msieid2024.iaecst.org (点击了解大会,参会等内容) 大会时间:2024年12月6-8日 大会地点:中国-广州 大会简介 随着全球化和信息化的不断深入,管理科学、信息化和经济发展…...
将面具贴到人脸上的过程
使用OpenCV进行人脸面具贴合和变形以适应人脸的3D透视角度,通常需要以下步骤: 人脸检测:首先需要检测图像中的人脸位置。特征点检测:在检测到的人脸区域中,找到关键特征点,如眼睛、鼻子、嘴巴等。透视变换…...
【Maven】Nexus私服
6. Maven的私服 6.1 什么是私服 Maven 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。一些无法从外部仓库下载到的构件,如项目组其他人员开发的…...
AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。
大家好,我是微学AI,今天给大家介绍一下AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。本文利用专家模…...
探索温度计的数字化设计:一个可视化温度数据的Web图表案例
随着科技的发展,数据可视化在各个领域中的应用越来越广泛。在温度监控和展示方面,传统的温度计已逐渐被数字化温度计所取代。本文将介绍一个使用Echarts库创建的温度计Web图表,该图表通过动态数据可视化展示了温度值,并通过渐变色…...
windows电脑上安装树莓派操作系统
在Windows电脑上安装树莓派通常涉及以下几个步骤:准备安装工具、下载树莓派系统镜像、烧录系统到SD卡、配置树莓派以及远程连接(如果需要无显示器操作)。以下是详细的步骤说明: 一、准备安装工具 安装树莓派官方烧录工具: 下载并安装Raspberry Pi Imager。这是一个官方的…...
交换机四大镜像(端口镜像、流镜像、VLAN镜像、MAC镜像)应用场景、配置实例及区别对比
在网络管理中,端口镜像、流镜像、VLAN镜像和MAC镜像都是用于监控和分析网络流量的重要技术。 端口镜像(Port Mirroring) 定义:端口镜像是将一个或多个源端口的流量复制到一个目标端口,以便于网络管理员能够监控和分析…...
我不是挂王-用python实现燕双鹰小游戏
一.准备工作 1.前言提要 作为程序员在浩瀚的数字宇宙中,常常感觉现实世界是一台精密运作的虚拟机,其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很…...
Java:反射、注解
文章目录 1. 反射1-1. 获取Class对象的三种方式1-2. 获取类的构造器、实例化对象1-3. 获取类的成员变量1-4. 获取类的成员方法 2. 注解2-1. 元注解2-2. 解析注解 1. 反射 反射:加载类,并允许以编程的方式解剖类中的各种成员变量、方法、构造器。 1-1. …...
Java 通过枚举类减少if else
目录 一. 案例1二. 案例2三. 案例3四. 案例4 枚举类聚合封装消息 一. 案例1 涉及到EnumMap的实际使用 ⏹定义一个枚举类,用来表示日本的各种支付方法对应的code import com.fasterxml.jackson.annotation.JsonFormat;// 让jackson将前台的数据封装数据到枚举类中 J…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
