SpringBoot 3.0 升级之 Swagger 升级
文章目录
- SpringFox3.0.0
- openapi3
- Swagger 注解迁移
- @Api
- @ApiOperation
- @ApiImplicitParam
- @ApiModel
- @ApiModelProperty
最近想尝试一下最新的 SpringBoot 项目,于是将自己的开源项目进行了一些升级。
- JDK 版本从
JDK8升级至JDK17。 - SpringBoot 版本从
SpringBoot 2.7.3升级到SpringBoot 3.2.0
SpringFox3.0.0
在 SpringBoot2.7.3 版本的时候,项目使用的是 SpringFox3.0.0 的依赖,用于使用 Swagger,相关依赖如下:
<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>
项目编译没有问题,但是启动运行的时候报错 javax.servlet.http.HttpServletRequest ClassNotFoundException 异常。
这是因为 SpringFox3.0.0 底层有 Swagger2 和 Swagger3 两套一来,其中 Swagger2 底层依赖 javax 模块,但是在 SpringBoox3 的版本中已经彻底移除了 javax 模块,改为使用 jakarta ,所以才会报这个错误。
openapi3
解决方案:移除 Swagger2,改为完全使用 Swagger3。
在项目 pom.xml 中移除 SpringFox3.0.0 的依赖,改为使用 openapi3 的依赖,如下:
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.0.0</version>
</dependency>
Swagger 注解迁移
Swagger2 和 Swagger3 使用的是完全不同的两套注解,所以原本使用 Swagger2 相关注解的代码页需要完全迁移,改为使用 Swagger3 的注解。
| Swagger2 | Swagger3 |
|---|---|
| @Api | @Tag |
| @ApiOperation | @Operation |
| @ApiImplicitParams | @Parameters |
| @ApiImplicitParam | @Parameter |
| @ApiModel | @Schema |
| @ApiModelProperty | @Schema |
| @ApiResponses | @ApiResponses |
| @ApiResponse | @ApiResponse |
| @ApiIgnore | @Hidden 或者 其他注解的 hidden = true 属性 |
@Api
- Swagger2 代码
@Api(value = "用户操作接口", tags = "UserController")
- Swagger3 代码
@Tag(name = "UserController", description = "用户操作接口")
@ApiOperation
- Swagger2 代码
@ApiOperation(value = "分页查询用户数据")
- Swagger3 代码
@Operation(description = "分页查询用户数据")
@ApiImplicitParam
- Swagger2 代码
@ApiImplicitParams({@ApiImplicitParam(name = "currentPage", value = "当前页码", dataTypeClass = Integer.class, required = true),@ApiImplicitParam(name = "size", value = "当前页大小", defaultValue = "10", dataTypeClass = Integer.class),@ApiImplicitParam(name = "queryUser", value = "用户查询条件", dataTypeClass = User.class)
}
- Swagger3 代码
@Parameters({@Parameter(name = "currentPage", description = "当前页码", required = true),@Parameter(name = "size", description = "当前页大小", example = "10"),@Parameter(name = "queryUser", description = "用户查询条件")
})
@ApiModel
- Swagger2 代码
@ApiModel(value = "用户信息实体类")
- Swagger3 代码
@Schema(name = "用户信息实体类")
@ApiModelProperty
- Swagger2 代码
@ApiModelProperty(value = "用户名称")
- Swagger3 代码
@Schema(name = "用户名称")
相关文章:
SpringBoot 3.0 升级之 Swagger 升级
文章目录 SpringFox3.0.0openapi3Swagger 注解迁移ApiApiOperationApiImplicitParamApiModelApiModelProperty 最近想尝试一下最新的 SpringBoot 项目,于是将自己的开源项目进行了一些升级。 JDK 版本从 JDK8 升级至 JDK17。SpringBoot 版本从 SpringBoot 2.7.3 升…...
AR游戏开发
增强现实(Augmented Reality,AR)游戏是一种整合了虚拟和现实元素的游戏体验。玩家通过使用AR设备(如智能手机、AR眼镜或平板电脑)来与真实世界互动,游戏中的数字内容与真实环境相结合。以下是一些关于AR游戏…...
Easy Excel生成复杂下Excel模板(下拉框)给用户下载
引言 文件的下载是一个非常常见的功能,也有一些非常好的框架可以使用,这里我们就介绍一种比较常见的场景,下载Excel模版,导入功能通常会配有一个模版下载的功能,根据下载的模版,填充数据然后再上传。 需求…...
基于EasyExcel的数据导入导出
前言: 代码复制粘贴即可用,主要包含的功能有Excel模板下载、基于Excel数据导入、Excel数据导出。 根据实际情况修改一些细节即可,最后有结果展示,可以先看下结果,是否是您想要的。 台上一分钟,台下60秒&a…...
电子学会C/C++编程等级考试2021年06月(六级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:逆波兰表达式 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* +…...
智能优化算法应用:基于供需算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于供需算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于供需算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.供需算法4.实验参数设定5.算法结果6.参考文献7.MA…...
vue3 setup语法糖写法基本教程
前言 官网地址:Vue.js - 渐进式 JavaScript 框架 | Vue.js (vuejs.org)下面只讲Vue3与Vue2有差异的地方,一些相同的地方我会忽略或者一笔带过与Vue3一同出来的还有Vite,但是现在不使用它,等以后会有单独的教程使用。目前仍旧使用v…...
利用两个指针的差值求字符串长度
指针和指针也可以相加减,例如定义一个一维数组arr[10];再定义一个指针(int *p)指向数组首元素的地址,定义一个指针(int* q)指向数组最后一个元素的地址,那么q-p的结果就是整个数组的…...
ping命令的工作原理
ping,Packet Internet Groper,是一种因特网包探索器,用于测试网络连接量的程序。Ping 是工作在 TCP/IP 网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特…...
谷歌的开源供应链安全
本内容是对Go项目负责人Russ Cox 在 ACM SCORED 活动上演讲内容[1]的摘录与整理。 SCORED 是Software Supply Chain Offensive Research and Ecosystem Defenses的简称, SCORED 23[2]于2023年11月30日在丹麦哥本哈根及远程参会形式举行。 摘要 💡 谷歌在开源软件供应…...
分发饼干(贪心算法)
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]…...
基于ssm旅游景点管理系统设计论文
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅游景点管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…...
用go封装一下封禁功能
思路 封禁业务也是在一般项目中比较常见的业务。我们也将它封装在库中作为功能之一。 我们同样使用adapter作为底层的存储结构,将封禁标示作为k-v结构存储。 把id和服务名称service作为key,把封禁的级别level作为value,以此我们能实现一些比…...
loki 如何格式化日志
部署 grafana-loki 首先介绍一下如何部署 官方文档:部署 grafana-loki 部署命令 设置集群的存储类,如果有默认可以不设置设置命名空间 helm install loki oci://registry-1.docker.io/bitnamicharts/grafana-loki --set global.storageClasslocal -n …...
在Linux上使用mysqldump备份MySQL数据库的详细步骤
MySQL数据库备份是确保数据安全性的关键步骤之一。在Linux系统上,使用mysqldump工具是一种常见、可靠的方法,它能够导出数据库的结构和数据,以便在需要时进行还原。以下是详细的备份步骤: 步骤 1:登录到MySQL服务器 …...
神经网络基础
神经网络 引言 神经网络的历史背景 神经网络的概念最早可以追溯到20世纪40年代,当时的科学家们受到生物神经系统的启发,尝试模拟人脑的信息处理方式。在接下来的几十年里,这个领域经历了多次兴衰。尽管在最初几十年内进展缓慢,…...
你好,C++(2)1.3 C++世界版图1.4 如何学好C++
1.3 C世界版图 C语言的发展过程,不仅是一个特性不断增加、内容不断丰富的过程,更是一个在应用领域中不断攻城略地的过程。在其30余年的发展过程中,C在多个应用领域都得到了广泛的应用和发展。无论是在最初的UNIX/Linux操作系统上,…...
Ceph入门到精通- smartctl -l error检查硬盘指标
“smartctl -l error” 是一个 Linux 命令,用于查看磁盘驱动器的 SMART (Self-Monitoring, Analysis and Reporting Technology) 错误日志。SMART 是一种技术,能够监测硬盘驱动器的状态并提供关于硬盘健康状况的信息。 运行该命令后,你将看到…...
【LeetCode刷题】-- 161.相隔为1的编辑距离
161.相隔为1的编辑距离 方法:一次遍历 首先,我们要确认字符串的长度不会相差太远。如果长度差了2个或更多字符,那么 s 和 t 就不可能是一次编辑之差的字符串。 接下来,我们假设 s 的长度总是短于或等于 t 的长度。如果不是这样&…...
SQL进阶理论篇(八):SQL查询的IO成本
文章目录 简介数据库缓冲池查看缓冲池的大小数据页加载的三种方式通过 last_query_cost 统计 SQL 语句的查询成本总结参考文献 简介 本节将介绍磁盘IO是如何加载数据的,重点介绍一下数据库缓冲池的概念。主要包括: 什么是数据库缓冲池,它在…...
Task发展历程:从简单任务运行器到现代自动化工具的完整演进史
Task发展历程:从简单任务运行器到现代自动化工具的完整演进史 【免费下载链接】task A fast, cross-platform build tool inspired by Make, designed for modern workflows. 项目地址: https://gitcode.com/gh_mirrors/ta/task Task是一个快速、跨平台的构建…...
【职场】聪明人,从不在公司交朋友
聪明人,从不在公司交朋友“你以为你们是朋友。但有一天你会发现,你们之间站着一个共同的雇主。”一、那个"最懂你"的同事 你们一起骂过同一个领导。 一起在茶水间吐槽过公司文化。 一起在深夜加班时互相打气。 你告诉他你想离职,告…...
HLS.js技术深度解析:解决浏览器端HLS流媒体播放的工程挑战
HLS.js技术深度解析:解决浏览器端HLS流媒体播放的工程挑战 【免费下载链接】hls.js HLS.js is a JavaScript library that plays HLS in browsers with support for MSE. 项目地址: https://gitcode.com/gh_mirrors/hl/hls.js 在现代Web视频应用中࿰…...
保姆级教程:用LabVIEW 2023给CANoe做个外挂,实现硬件数据采集与自动化测试
保姆级教程:用LabVIEW 2023给CANoe做个外挂,实现硬件数据采集与自动化测试 在汽车电子测试领域,工程师们常常面临一个核心矛盾:CANoe作为行业标准的总线仿真工具提供了强大的协议分析和测试管理能力,但在面对非标硬件接…...
ElevenLabs声音库调优秘技:如何用API+Prompt工程将TTS自然度提升67%(附2024最新声纹参数表)
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs声音库资源推荐 ElevenLabs 提供了业界领先的高质量语音合成服务,其声音库(Voice Library)涵盖多语种、多风格的预训练语音模型,适用于播客、有…...
9.9元ESP32-C3移植RT-Thread Nano:低成本RTOS开发与调试实战
1. 项目概述:当开源RTOS遇上性价比神板最近在捣鼓嵌入式开发,发现了一块宝藏开发板——ESP32-C3的某个简约款,价格直接干到了9.9元。这个价格,别说喝杯奶茶了,连个像样的模块都买不到,但它不仅能跑起来&…...
Vue3-DateTime-Picker:企业级日期时间选择器的5大架构创新与实战指南
Vue3-DateTime-Picker:企业级日期时间选择器的5大架构创新与实战指南 【免费下载链接】vue3-date-time-picker Datepicker component for Vue 3 项目地址: https://gitcode.com/gh_mirrors/vu/vue3-date-time-picker Vue3-DateTime-Picker是一款基于Vue 3 Co…...
评估智能体性能:成功率、延迟与成本
一个从“拍脑袋优化”到“数据驱动调优”的真实转型故事 ——顺便聊聊我这三年烧掉的API费用和熬过的夜 去年夏天,我们团队做了一个电商智能客服Agent。上线第一周,各项指标看起来都挺正常:用户满意度4.7分,平均响应时间不到2秒。…...
手把手教你移植μGUI到STM32F103:一个文件搞定单片机图形界面
从零构建STM32图形界面:μGUI移植实战指南 在嵌入式开发中,图形用户界面(GUI)的实现往往令人望而生畏。市面上虽然有诸多成熟的GUI解决方案,但对于资源有限的STM32F103系列单片机来说,轻量级的μGUI无疑是一个理想选择。本文将带…...
从赛博朋克到量子有机体,未来主义风格演进全图谱,深度解析MJ 5.2→6.2→NijiV6的渲染范式跃迁
更多请点击: https://intelliparadigm.com 第一章:赛博朋克到量子有机体:未来主义视觉范式的哲学跃迁 当霓虹雨巷中的义体少女凝视全息广告牌,她瞳孔倒映的已不仅是资本编码的欲望图景,而是意识与拓扑量子态耦合的初始…...
