openapi + knife4j的使用

一、依赖作用与关系

1. springdoc-openapi-starter-webmvc-api

核心功能
基于 OpenAPI 3 规范,自动生成 API 文档元数据(JSON 格式),并集成 Spring MVC。
提供@Tag @Operation@Schema 等注解,支持通过代码描述接口和模型。

2. knife4j-openapi3-jakarta-spring-boot-starter

核心功能
提供增强的 Swagger UI 界面(Knife4j),支持文档搜索、离线导出、接口调试等扩展功能。
依赖 springdoc-openapi 生成元数据,仅负责界面渲染和交互优化。

定位
Swagger UI 的替代品,提供更友好的文档展示和操作体验


二、使用步骤详解

1. 添加依赖

pom.xml 中引入以下依赖(需注意版本兼容性):

<!-- OpenAPI 3 元数据生成 -->
<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-api</artifactId><version>2.3.0</version>
</dependency><!-- Knife4j 增强 UI -->
<dependency><groupId>com.github.xingfudeshi</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.5.0</version>
</dependency>
版本说明

springdoc-openapi ≥ 2.0:支持 Spring Boot 3.x(Jakarta EE 9+)
knife4j-openapi3-jakarta ≥ 4.0:适配 Jakarta 命名空间


2. 基础配置

application.yml 中添加必要配置:

springdoc:swagger-ui:path: /swagger-ui  # 原生 UI 路径(可选)api-docs:path: /v3/api-docs      # OpenAPI JSON 元数据路径default-consumes-media-type: application/jsondefault-produces-media-type: application/json# Knife4j 配置(可选)
knife4j:enable: truesetting:language: zh-CN         # 中文界面enable-footer: false    # 禁用页脚广告

3. 配置类(可选)

自定义全局 OpenAPI 元数据(如标题、版本):

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class OpenApiConfig {@Beanpublic OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("电商系统 API 文档").version("1.0").description("管理后台接口文档"));}
}

4. 接口代码注解

使用注解描述接口和模型:

4.1 接口描述(Controller)
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;@RestController
@RequestMapping("/brand")
@Tag(name = "品牌管理", description = "商品品牌相关接口")
public class BrandController {@PostMapping("/create")@Operation(summary = "创建品牌", description = "需要管理员权限")public Result<Long> createBrand(@RequestBody @Valid BrandCreateReqVO reqVO,@Parameter(description = "操作人 ID", required = true) @RequestHeader("X-User-Id") Long userId) {// 业务逻辑}
}
4.2 模型描述(DTO/VO)
import io.swagger.v3.oas.annotations.media.Schema;@Data
@Schema(name = "BrandCreateReqVO", description = "品牌创建请求体")
public class BrandCreateReqVO {@Schema(description = "品牌名称", example = "Apple", requiredMode = REQUIRED)@NotBlank(message = "名称不能为空")private String name;@Schema(description = "排序值", example = "1", minimum = "0")@Min(value = 0, message = "排序值最小为0")private Integer sort;
}

5. 访问文档界面

启动项目后访问以下 URL:

功能URL
Knife4j 增强 UIhttp://localhost:8080/doc.html
原生 Swagger UIhttp://localhost:8080/swagger-ui
OpenAPI 元数据http://localhost:8080/v3/api-docs

三、Knife4j 特色功能

1. 文档增强特性

离线导出:支持 Markdown/HTML/Word 格式导出
接口搜索:全局关键字搜索 API
调试增强:表单参数自动生成、响应结果格式化

安全控制(生产建议)

knife4j:basic:enable: trueusername: adminpassword: 123456

四、常见问题

1. 依赖冲突

现象:与旧版 Springfox 库(如 springfox-swagger2)冲突
解决:移除所有 springfox 相关依赖

2. 注解不生效

检查项

  1. 确保 @EnableWebMvc 未覆盖默认配置
  2. 验证 @Schema 是否标注在 Getter 方法或字段上

3. 是否需要同时引入两个依赖?

必须springdoc-openapi 生成元数据,knife4j 负责渲染 UI
若仅需原生 UI:可只依赖 springdoc-openapi-ui


五、总结

通过 springdoc-openapi + knife4j 的组合,开发者可以:

  1. 标准化:遵循 OpenAPI 3 规范生成文档
  2. 高效协作:提供清晰的接口定义和调试工具
  3. 美观易用:Knife4j 的增强 UI 提升使用体验

建议在开发阶段启用文档,生产环境通过 knife4j.enable=false 关闭访问。

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

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

相关文章

解决电脑问题——突然断网!

电脑如果突然断网是怎么回事 电脑突然断网可能由多种原因造成&#xff0c;以下是常见的因素&#xff1a; 网络连接与权限问题 路由器或调制解调器故障&#xff1a;路由器或调制解调器可能出现硬件故障、软件故障或设置错误。可以尝试重启设备&#xff0c;如果问题依旧&#…

区块链从专家到小白

文章目录 含义应用场景典型特征 含义 以非对称加密算法为基础。 每个**区块&#xff08;Block&#xff09;**包含&#xff1a; ​交易数据​&#xff08;如转账记录、合约内容&#xff09;。 ​时间戳​&#xff08;记录生成时间&#xff09;。 ​哈希值​&#xff08;当前区…

git 提交标签

Git 提交标签 提交消息格式&#xff1a; <type>: <description> &#xff08;示例&#xff1a;git commit -m "feat: add user login API"&#xff09; 标签适用场景feat新增功能&#xff08;Feature&#xff09;。fix修复 Bug&#xff08;Bug fix&…

微信小程序:动态表格实现,表头单元格数据完全从data中获取,宽度自定义,自定义文本框,行勾选,样式效果,横向滚动表格(解决背景色不足的问题)等

一、样式效果 二、代码 1、wxml <view class"line flex flex-center"><view class"none" wx:if"{{info.length 0}}">暂无料号</view><view wx:else class"table-container"><!-- 动态生成表头 -->&…

探索 MCP 和 A2A 协议: 本质上新协议都基于 HTTP的

以下是以 CSDN 博客的形式记录你对 MCP 协议和 A2A 协议数据传递的理解&#xff0c;重点探讨了它们为何基于 HTTP 协议、HTTP 的优势&#xff0c;以及数据传输的本质。文章面向技术社区&#xff0c;结构清晰&#xff0c;适合分享。 探索 MCP 和 A2A 协议&#xff1a;为何新协议…

[redis进阶一]redis的持久化(2)AOF篇章

目录 一 为什么有了RDB持久化机制还要有AOF呢 板书介绍具体原因: ​编辑二 详细讲解AOF机制 (1)AOF的基本使用 1)板书如下 2)开启AOF机制: 3) AOF工作流程 (2)AOF是否会影响到redis性能 ​编辑 (3)AOF缓冲区刷新策略 (4)AOF的重写机制 板书如下: 为什么要有这个重写机…

前端防御性编程

关于防御性编程 你是否遇到过&#xff0c;接口请求失败或者返回数据错误&#xff0c;导致系统白屏或者前端自身写的代码存在一些缺陷&#xff0c;导致整个系统不够健壮&#xff0c;从而导致系统白屏 常见的问题与防范 最常见的问题 访问了null或者undefined的属性 null.a …

[数据结构]排序 --2

目录 8、快速排序 8.1、Hoare版 8.2、挖坑法 8.3、前后指针法 9、快速排序优化 9.1、三数取中法 9.2、采用插入排序 10、快速排序非递归 11、归并排序 12、归并排序非递归 13、排序类算法总结 14、计数排序 15、其他排序 15.1、基数排序 15.2、桶排序 8、快速排…

虎跃办公AI:重构智能办公的「模型交响乐团」

虎跃办公AI&#xff1a;重构智能办公的「模型交响乐团」 ——当全球40大模型在办公场景中奏响协奏曲 在某科创园区的会议室里&#xff0c;市场总监李薇正用AI生成产品发布会方案&#xff0c;设计团队同步调校着AI渲染的3D主视觉&#xff0c;法务AI自动扫描着合同风险条款——这…

JdbcTemplate基本使用

JdbcTemplate概述 它是spring框架中提供的一个对象&#xff0c;是对原始繁琐的JdbcAPI对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和MbernateTemplate&#xff0c;操作nosql数据库的RedisTemplate&#xff0c;操作消息队列的…

vue+leaflet 区域划分_反向遮罩层

leaflet 区域划分_遮罩层 geojson在线生成器网址:(https://datav.aliyun.com/portal/school/atlas/area_selector) 点击前往阿里云geojson生成器 效果图: 实现下面效果,只需要把addSateLayer函数的调用取消掉就好了. //添加遮罩层代码function addMask() {var latlngs;var fe…

ESP32开发之ubuntu环境搭建

1. 在Ubuntu官网下载Ubuntu server 20.04版本https://releases.ubuntu.com/20.04.6/ 2. 在vmware下安装Ubuntu 3. 改Ubuntu静态IP $ sudo vi /etc/netplan/00-installer-config.yaml# This is the network config written by ‘subiquity’ network: renderer: networkd eth…

HTTP 1.1 比 HTTP1.0 多了什么?(详尽版)

相较于HTTP 1.0&#xff0c;1.1 版本增加了以上特性&#xff1a; 1. 新增了连接管理即 keepalive&#xff0c;允许持久连接。 定义&#xff1a; Keepalive允许客户端和服务器在完成一次请求-响应后&#xff0c;保持连接处于打开状态&#xff0c;以便后续请求复用同一连接&am…

【深度学习】PyTorch实现VGG16模型及网络层数学原理

一、Demo概述 代码已附在文末 1.1 代码功能 ✅ 实现VGG16网络结构✅ 在CIFAR10数据集上训练分类模型 1.2 环境配置 详见【深度学习】Windows系统Anaconda CUDA cuDNN Pytorch环境配置 二、各网络层概念 2.1 卷积层&#xff08;nn.Conv2d&#xff09; nn.Conv2d(in_cha…

解决RecyclerView在调用smoothScrollToPosition后最后一个item底部超出屏幕的问题

要解决RecyclerView在调用smoothScrollToPosition后最后一个item底部超出屏幕的问题&#xff0c;可以使用自定义的LinearSmoothScroller&#xff0c;使其底部对齐屏幕。步骤如下&#xff1a; 创建自定义的SmoothScroller类&#xff1a; 继承LinearSmoothScroller并重写getVerti…

k8s亲和力和非亲和力

在 Kubernetes 中&#xff0c;亲和力&#xff08;Affinity&#xff09;和非亲和力&#xff08;Anti-Affinity&#xff09;是用于控制 Pod 调度策略的机制&#xff0c;它们可以帮助优化资源利用率、提高应用性能和可用性。以下是亲和力和非亲和力的详细解释&#xff1a; 亲和力…

开发一款游戏需要哪些岗位角色参与?

常见分类 1. 游戏策划&#xff08;Game Designer&#xff09; 核心职责&#xff1a;设计游戏的玩法、规则、内容和整体体验。 具体工作&#xff1a; 系统设计&#xff1a;设计游戏的战斗、经济、成长、社交等核心系统。 数值设计&#xff1a;平衡角色属性、装备数值、经济系…

Asp.NET Core WebApi 创建带鉴权机制的Api

构建一个包含 JWT&#xff08;JSON Web Token&#xff09;鉴权的 Web API 是一种常见的做法&#xff0c;用于保护 API 端点并验证用户身份。以下是一个基于 ASP.NET Core 的完整示例&#xff0c;展示如何实现 JWT 鉴权。 1. 创建 ASP.NET Core Web API 项目 使用 .NET CLI 或 …

Jenkins 发送钉钉消息

这里不介绍 Jenkins 的安装&#xff0c;可以网上找到很多安装教程&#xff0c;重点介绍如何集成钉钉消息。 需要提前准备钉钉机器人的 webhook 地址。&#xff08;网上找下&#xff0c;很多教程&#xff09; 下面开始配置钉钉机器人&#xff0c;登录 Jenkins&#xff0c;下载 …

CentOS中离线安装DockerCompos并用其部署Rabbitmq(使用离线导入导出docker镜像方式)

场景 DockerDockerCompose实现部署jenkins,并实现jenkinsfile打包SpringBootVue流水线项目过程详解、踩坑记录(附镜像资源、离线包资源下载)&#xff1a; DockerDockerCompose实现部署jenkins,并实现jenkinsfile打包SpringBootVue流水线项目过程详解、踩坑记录(附镜像资源、离…