如何區別在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.pswp.cn/web/73411.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73411.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73411.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pagehelper 分頁插件使用說明

pom.xml&#xff1a;pageHelper坐標 <!--pageHelper坐標--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency> 分…

C++可變參數

可變參數C風格的可變參數C風格可變參數的使用 C11可變參數模板遞歸展開參數包參數列表展開折疊表達式 STL中的emplace插入接口 可變參數 C風格的可變參數 可變參數是一種語言特性&#xff0c;可以在函數聲明中使用省略號...來表示函數接受可變數量的參數。 例如典型的printf…

數據庫的操作,以及sql之DML

首先&#xff0c;創建表以及插入數據 create table t_text(id int primary key auto_increment,name varchar(20) unique not null,gender char(5) not null check(gender in ("男","女")),deed varchar(255) not null default "事例不詳"); in…

vue2前端日志數據存儲(indexedD)自動清理3天前的數據

前言&#xff1a;關于Dexie.js這個前端本地數據庫&#xff0c;如何使用IndexedDB來存儲數據&#xff0c;并且設置到期自動清理的機制。首先&#xff0c;我需要回憶一下Dexie.js的基本用法&#xff0c;以及IndexedDB的特性。IndexedDB是瀏覽器中的一種非關系型數據庫&#xff0c…

【MySQL篇】索引特性,索引的工作原理以及索引的創建與管理

目錄 一&#xff0c;初識索引 二&#xff0c;MySQL與磁盤交互的基本單位 三&#xff0c;MySQL中數據文件的特性 四&#xff0c;理解page和索引 五&#xff0c;聚簇索引和非聚簇索引 六&#xff0c;索引操作 查詢索引 創建主鍵索引 唯一索引的創建 普通索引的創建 全文…

springboot項目啟動常見的問題以及配置以及一些使用技巧

1.配置倉庫 這里要把xml文件從國外的鏡像源改成國內的鏡像源。改鏡像源可以查看這篇文章 點擊查看 2.更改文件類型 方法一&#xff1a;右鍵文件找到Mark Dircetory as可以更改文件類型 方法二&#xff1a; 3.springboot本地Maven倉庫的位置 4.pom.xml文件報紅錯誤怎么辦 這…

【初探數據結構】二叉樹的順序結構——堆的實現詳解(上下調整算法的時間復雜度分析)

&#x1f4ac; 歡迎討論&#xff1a;在閱讀過程中有任何疑問&#xff0c;歡迎在評論區留言&#xff0c;我們一起交流學習&#xff01; &#x1f44d; 點贊、收藏與分享&#xff1a;如果你覺得這篇文章對你有幫助&#xff0c;記得點贊、收藏&#xff0c;并分享給更多對數據結構感…

流量分析2

一&#xff0c;webshell流量 [GKCTF 2021]簽到 先看協議分級&#xff0c;大部分是tcp&#xff0c;里面有http的基于的行文本數據占了很大的比重&#xff0c;看看里面有什么 過濾http的流量 點擊一條流量&#xff0c;里面的內容進去后面有基于行的文本數據&#xff0c; 先解he…

頭歌實踐教學平臺--【數據庫概論】--SQL

一、表結構與完整性約束的修改(ALTER) 1.修改表名 USE TestDb1; alter table your_table rename TO my_table; 2.添加與刪除字段 #語句1&#xff1a;刪除表orderDetail中的列orderDate alter table orderDetail drop orderDate; #語句2&#xff1a;添加列unitPrice alter t…

在 React 中,組件之間傳遞變量的常見方法

目錄 1. **通過 Props 傳遞數據**2. **通過回調函數傳遞數據**3. **通過 Context API 傳遞數據**4. **通過 Redux 管理全局狀態**5. **通過事件總線&#xff08;如 Node.js 的 EventEmitter&#xff09;**6. **通過 Local Storage / Session Storage**7. **通過 URL 查詢參數傳…

Redis + 布隆過濾器解決緩存穿透問題

Redis 布隆過濾器解決緩存穿透問題 1. Redis 布隆過濾器解決緩存穿透問題 &#x1f4cc; 什么是緩存穿透&#xff1f; 緩存穿透指的是查詢的數據既不在緩存&#xff0c;也不在數據庫&#xff0c;導致每次查詢都直接訪問數據庫&#xff0c;增加數據庫壓力。 例如&#xff1…

Vue動態添加或刪除DOM元素:購物車實例

Vue 指令系列文章: 《Vue插值:雙大括號標簽、v-text、v-html、v-bind 指令》 《Vue指令:v-cloak、v-once、v-pre 指令》 《Vue條件判斷:v-if、v-else、v-else-if、v-show 指令》 《Vue循環遍歷:v-for 指令》 《Vue事件處理:v-on 指令》 《Vue表單元素綁定:v-model 指令》…

vue h5實現車牌號輸入框

哈嘍&#xff0c;大家好&#xff0c;最近鵬仔開發的項目是學校校內車輛超速方面的統計檢測方面的系統&#xff0c;在開發過程中發現有個小功能&#xff0c;就是用戶移動端添加車牌號&#xff0c;剛開始想著就一個輸入框&#xff0c;提交時正則效驗一下格式就行&#xff0c;最后…

硬件基礎(5):(3)二極管的應用

文章目錄 [toc]1. **整流電路****功能**&#xff1a;**工作原理**&#xff1a;**應用實例**&#xff1a;電路組成&#xff1a;整流過程&#xff1a;電路的應用&#xff1a; 2. **穩壓電路****功能**&#xff1a;**工作原理**&#xff1a;**應用實例**&#xff1a;電路組成及功能…

Wireshark網絡抓包分析使用詳解

序言 之前學計網還有前幾天備考華為 ICT 網絡賽道時都有了解認識 Wireshark&#xff0c;但一直沒怎么專門去用過&#xff0c;也沒去系統學習過&#xff0c;就想趁著備考的網絡相關知識還沒忘光&#xff0c;先來系統學下整理點筆記~ 什么是抓包&#xff1f;抓包就是將網絡傳輸…

安心聯車輛管理平臺源碼價值分析

安心聯車輛管理平臺源碼的價值可從技術特性、功能覆蓋、市場適配性、擴展潛力及商業化支持等多個維度進行分析。以下結合實際應用進行詳細解讀&#xff1a; 一、技術架構與開發優勢 主流技術棧與高性能架構 源碼采用成熟的前后端分離架構&#xff0c;后端基于Java技術&#xff…

【操作系統】Docker如何使用-續

文章目錄 1、概述2、鞏固知識2.1、基礎命令2.2、容器管理2.3、鏡像管理2.4、網絡管理2.5、Compose 3、常用命令 1、概述 在使用Docker的過程中&#xff0c;掌握常用的命令是至關重要的。然而&#xff0c;隨著時間的推移&#xff0c;我們可能會遺忘一些關鍵的命令或對其用法變得…

ElementUI el-menu導航開啟vue-router模式

有沒有小伙伴遇到這么一種情況&#xff1a;ElementUI el-menu導航中&#xff0c;開啟vue-router 的模式后&#xff0c;點擊觸發事件而不進行路由跳轉&#xff1f; 別慌&#xff01;下面直接說解決方案&#xff1a; 借助路由守衛進行判斷 給el-menu綁定切換事件&#xff0c;給…

【leetcode hot 100 17】電話號碼的字母組合

分析&#xff1a;當設計關鍵字“所有組合”時&#xff0c;要考慮深度優先遍歷、廣度優先遍歷&#xff08;層次遍歷&#xff09;&#xff0c;其中&#xff1a; 深度優先搜索&#xff1a; 自頂向下的遞歸實現深搜定義子問題在當前遞歸層結合子問題結果解決原問題 廣度優先搜索 利…

Vue 2 探秘:visible 和 append-to-body 是誰的小秘密?

&#x1f680; Vue 2 探秘&#xff1a;visible 和 append-to-body 是誰的小秘密&#xff1f;&#x1f914; 父組件&#xff1a;identify-list.vue子組件&#xff1a;fake-clue-list.vue 嘿&#xff0c;各位前端探險家&#xff01;&#x1f44b; 今天我們要在 Vue 2 的代碼叢林…