如何区别在Spring Boot 2 和 Spring Boot 3 中使用 Knife4j:集成与配置指南

在现代的 Web 开发中,API 文档是不可或缺的一部分。Knife4j 是基于 Swagger 的增强工具,它不仅提供了更友好的 API 文档界面,还支持更多实用的功能,如离线文档导出、全局参数配置等。本文将详细介绍如何在 Spring Boot 2Spring Boot 3 中集成 Knife4j,并讲解其常用配置和注解的使用方法。


一、Knife4j 简介

Knife4j(原名 Swagger-Bootstrap-UI)是 Swagger 的增强版,提供了以下核心功能:

  1. 更友好的界面:美观、简洁的 API 文档展示。
  2. 增强功能:支持离线文档导出、全局参数、调试增强等。
  3. 兼容性:支持 Swagger 2 和 OpenAPI 3 规范。
  4. 易用性:通过简单配置即可快速集成。

二、Spring Boot 2 中使用 Knife4j

1. 依赖引入

pom.xml 中添加 Knife4j 的依赖:

<XML>

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency>

2. 配置 Swagger

创建一个配置类,定义 Swagger 的基本信息:

<JAVA>

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")) // 扫描的包路径.paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("Knife4j Demo API").description("Spring Boot 2 with Knife4j Example").version("1.0").build();}
}

3. 编写 Controller

创建一个示例 Controller,用于生成 API 文档:

<JAVA>

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api")
@Api(tags = "示例模块")
public class DemoController {@GetMapping("/hello")@ApiOperation(value = "示例接口", notes = "返回一个简单的问候语")public String hello() {return "Hello, Knife4j!";}
}

4. 访问 Knife4j 文档

启动项目,访问以下 URL:

  • Knife4j 文档页面:http://localhost:8080/doc.html
  • Swagger JSON 文档:http://localhost:8080/v2/api-docs

三、Spring Boot 3 中使用 Knife4j

1. 依赖引入

Spring Boot 3 使用 Jakarta EE 9+,因此需要引入 jakarta 版本的 Knife4j 依赖:

<XML>

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.2.0</version>
</dependency>

2. 配置 OpenAPI

创建一个配置类,定义 OpenAPI 的基本信息:

<JAVA>

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 Knife4jConfig {@Beanpublic OpenAPI customOpenAPI() {return new OpenAPI().info(new Info().title("Knife4j Demo API").version("1.0").description("Spring Boot 3 with Knife4j Example"));}
}

3. 编写 Controller

创建一个示例 Controller,用于生成 API 文档:

<JAVA>

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api")
@Tag(name = "示例模块", description = "示例模块 API")
public class DemoController {@GetMapping("/hello")@Operation(summary = "示例接口", description = "返回一个简单的问候语")public String hello() {return "Hello, Knife4j!";}
}

4. 访问 Knife4j 文档

启动项目,访问以下 URL:

  • Knife4j 文档页面:http://localhost:8080/doc.html
  • OpenAPI 3 JSON 文档:http://localhost:8080/v3/api-docs

四、Knife4j 常用配置

1. 配置启用 Knife4j

application.yml 中配置:

<YAML>

knife4j:enable: true # 启用 Knife4jsetting:language: zh-CN # 界面语言为中文enable-swagger-models: true # 显示 Modelsenable-default-params: true # 启用默认参数

2. 离线文档导出

Knife4j 支持将文档导出为 Markdown、HTML 或 Word 格式:

  1. 访问 Knife4j 文档页面。
  2. 点击右上角的“离线文档”按钮。
  3. 选择导出格式并下载。

3. 全局参数

在 Swagger 配置类中添加全局参数:

<JAVA>

import springfox.documentation.service.ApiKey;
import springfox.documentation.service.SecurityScheme;@Bean
public Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).securitySchemes(Collections.singletonList(new ApiKey("Authorization", "Authorization", "header"))).select().apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")).paths(PathSelectors.any()).build();
}

五、Knife4j 常用注解

1. 类级别注解

  • @Api(Swagger 2)(springboot2使用注解):用于标识 API 模块的名称。

    <JAVA>

    @Api(tags = "示例模块")
  • @Tag(OpenAPI 3 (springboot3使用注解)):用于标识 API 模块的名称。

    <JAVA>

    @Tag(name = "示例模块", description = "示例模块 API")

2. 方法级别注解

  • @ApiOperation(Swagger 2)(springboot2使用注解):用于描述 API 接口的详细信息。

    <JAVA>

    @ApiOperation(value = "示例接口", notes = "返回一个简单的问候语")
  • @Operation(OpenAPI 3)(springboot3使用注解):用于描述 API 接口的详细信息。

    <JAVA>

    @Operation(summary = "示例接口", description = "返回一个简单的问候语")

3. 参数级别注解

  • @ApiParam(Swagger 2)(springboot2使用注解):用于描述 API 参数。

    <JAVA>

    @ApiParam(name = "name", value = "用户名称", required = true)
  • @Parameter(OpenAPI 3)(springboot3使用注解):用于描述 API 参数。

    <JAVA>

    @Parameter(name = "name", description = "用户名称", required = true)

六、总结

Knife4j 是 Swagger 的增强版,适合在 Spring Boot 项目中生成美观、功能强大的 API 文档。本文详细介绍了如何在 Spring Boot 2 和 Spring Boot 3 中集成 Knife4j,并讲解了常用配置和注解的使用方法。

如果你正在为 API 文档的生成和展示而烦恼,不妨试试 Knife4j,它会为你的开发工作带来极大的便利!😊


参考资源

  • Knife4j 官方文档
  • Swagger 官方文档

希望这篇博客对你有所帮助,欢迎在评论区分享你的使用体验或提出问题!🚀

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

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

相关文章

超融合服务器与普通服务器的具体区别

超融合服务器与普通服务器的具体区别 超融合服务器&#xff08;Hyper-Converged Infrastructure, HCI&#xff09;与传统服务器在架构设计、功能整合、管理方式、性能表现及适用场景等方面存在显著差异。以下从多个维度进行详细对比分析&#xff1a; 一、硬件架构与资源整合 集…

(基本常识)C++中const与引用——面试常问

作者&#xff1a;求一个demo 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 内容通俗易懂&#xff0c;没有废话&#xff0c;文章最后是面试常问内容&#xff08;建议通过标题目录学习&#xff09; 废话不多…

数据库与表的操作

1. SQL 分类 SQL 根据功能分为以下几类&#xff1a; **DDL **: 定义数据库对象&#xff08;库、表、列、索引等&#xff09; 常用语句&#xff1a;CREATE, DROP, ALTER, RENAME, TRUNCATE示例&#xff1a;CREATE TABLE t_user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHA…

2025年渗透测试面试题总结-某shopee -红队-Singapore(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 shopee -红队-Singapore 一、Linux提权方式扩展分析 二、入侵痕迹清除技术 三、真实IP发现技术 四、…

GeoChat : Grounded Large Vision-Language Model for Remote Sensing论文精读

GeoChat : Grounded Large Vision-Language Model for Remote Sensing 是一个针对遥感场景的llm&#xff0c;提供支持多任务对话&#xff08;对高分辨率遥感图像&#xff09;。也造了个数据集。 一些思考&#xff1a; 文中提到的局限性&#xff1a;小物体和多框预测较难。小物…

基于STM32的PID算法控制电机调速

一、制作目标 以STM32F103C8T6单片机作为主控&#xff0c;使用PID控制算法&#xff0c;控制TB6612FNG电机驱动板模块驱动直流减速电机&#xff08;带AB相编码器&#xff09;&#xff0c;实现任意设定转速的电机转速动态控制&#xff0c;类似于汽车的定速巡航功能&#xff0c;可…

系统思考—看见未来

感谢上海财经大学终身教育学院的持续邀请&#xff01;每个月&#xff0c;都会带着不同的思维火花&#xff0c;走进财大与学员们一起探索系统思考的奥秘。 这次为宜宾市的干部们带来了一场深刻的学习体验。通过系统思考&#xff0c;帮助大家从整体视角去发现问题、分析问题、解…

qwindowkit 编译教程

1、Windows编译及示例 1.1 下载源码 https://github.com/stdware/qwindowkit 1.2 cmake编译 1.3 VS构建 1.4 编译成功

HashMap的位操作是什么?HashSet 的 contains 方法复杂度是多少?红黑树简单讲一下?

一、HashMap 的位操作设计 HashMap 使用位运算优化哈希计算与索引定位&#xff0c;核心场景如下&#xff1a; 哈希扰动函数 计算键的哈希值时&#xff0c;将高16位与低16位异或&#xff1a; static final int hash(Object key) {int h;return (key null) ? 0 : (h key.hash…

软件开发过程中常用的调试工具(gdb)

gdb 因为我们公司其中脚本中有rk的gdb调试工具脚本&#xff0c;内部只需要将其打开后进行编译即可&#xff1a; 需要将编译出来的cvr_app 第一种&#xff1a;使用gdb将app给跑起来&#xff1a;gdb cvr_app 然后在出现问题时&#xff1a; 输入bt&#xff0c;可以打印出当前…

S32K144外设实验(七):FTM输出多路互补带死区PWM

文章目录 1. 概述1.1 时钟系统1.2 实验目的2. 代码的配置2.1 时钟配置2.2 FTM模块配置2.3 输出引脚配置2.4 API函数调用1. 概述 互补对的PWM输出是很重要的外设功能,尤其应用再无刷电机的控制。 1.1 时钟系统 笔者再墨迹一遍时钟的设置,因为很重要。 FTM的CPU接口时钟为SY…

Qt6相对Qt5的主要提升(AI总结)

我&#xff1a; Qt 6 相对于5 有哪些新功能&#xff1f; Qt 6 相对于 Qt 5 有诸多新功能和改进&#xff0c;以下是主要的新增特性&#xff1a; 1. 架构和核心库的重构 模块化设计&#xff1a;Qt 6 采用了更加灵活的模块化设计&#xff0c;开发者可以按需引入必要的功能模块&a…

一文解读DeepSeek的安全风险、挑战与应对策略

引言 DeepSeek作为中国领先的AI大模型提供商&#xff0c;凭借其开源、低成本和高性能的优势&#xff0c;迅速在全球AI市场占据重要地位。然而&#xff0c;随着其应用范围的扩大&#xff0c;DeepSeek在数据安全、模型漏洞、网络攻击等方面面临严峻挑战。本文基于最新公开资料&am…

文生图语义识别插件使用(controlnet)

1. 插件下载(github) https://github.com/Mikubill/sd-webui-controlnet https://github.com/lllyasviel/ControlNet2. 模型下载(hugging face) https://github.com/Mikubill/sd-webui-controlnet/wiki/Model-download https://huggingface.co/bdsqlsz/qinglong_controlnet-l…

论华为 Pura X 折叠屏性能检测

在科技浪潮中&#xff0c;折叠屏手机以其创新形态掀起市场热潮。华为 Pura X 作为华为最新折叠手机&#xff0c;承载前沿科技与精湛工艺&#xff0c;成为行业焦点。它融合先进折叠屏技术与优质材质&#xff0c;致力于打破传统手机使用边界&#xff0c;为用户开启全新体验。但产…

多路转接Poll

在之前我们讲过select是最古老的多路转接方案&#xff0c;古老就意味着他不是很方便使用&#xff0c;他需要用户手动保存fd_set这个位图结构&#xff0c;来表示读写事件的关注与否或者就绪性。 而且由于fd_set的大小是固定的&#xff0c;这就意味着他能管理的套接字文件描述符是…

C语言贪吃蛇实现

When the night gets dark,remember that the Sun is also a star. 当夜幕降临时&#xff0c;请记住太阳也是一颗星星。 ————《去月球海滩篇》 目录 文章目录 一、《贪吃蛇》游戏介绍 二、WIN32部分接口简单介绍 2.1 控制台窗口大小设置 2.2 命令行窗口的名称的变更 2…

基于深度学习的图片识别系统(下)

文章目录 前言1.任务描述2.模型搭建3.代码解释3.1模型加载3.2加载数据3.3模型权重的保存3.4学习率3.5过拟合3.6训练模型3.7调试检查 4.结果分析5. 完整代码结语 前言 书接上回&#xff0c;我们已经完成数据预处理部分的内容&#xff0c;后续仍需要对表格进行裁剪&#xff0c;此…

再学:区块链基础与合约初探 EVM与GAS机制

目录 1.区块链是什么 2.remix ​3.账户​ ​4.以太坊三种交易​ 5.EVM 6.以太坊客户端节点 ​7.Gas费用 8.区块链浏览器 1.区块链是什么 只需要检验根节点 Merkel根是否有更改&#xff0c;就不用检查每个交易是否有更改。方便很多。 2.remix 3.账户 如果交易失败的话&…

Java 中装饰者模式与策略模式在埋点系统中的应用

前言 在软件开发中&#xff0c;装饰者模式和策略模式是两种常用的设计模式&#xff0c;它们在特定的业务场景下能够发挥巨大的作用。本文将通过一个实际的埋点系统案例&#xff0c;探讨如何在 Java 中运用装饰者模式和策略模式&#xff0c;以及如何结合工厂方法模式来优化代码…