Spring Boot3整合Knife4j(4.5.0)

整體概述

Spring Boot 是用于簡化 Spring 應用開發的框架,通過自動配置和約定大于配置原則,能讓開發者快速搭建和運行 Spring 應用。Knife4j 是基于 Swagger 增強的 API 文檔生成工具,可方便展示和調試 API 接口,生成美觀易用的 API 文檔。以下將詳細介紹如何從零開始把 Spring Boot 3.3.0 與 Knife4j 4.5.0 進行整合。

步驟 1:創建 Spring Boot 項目

方式一:使用 Spring Initializr

Spring Initializr 是在線的 Spring Boot 項目生成器,提供圖形化界面,便于快速創建項目。

  1. 打開瀏覽器,訪問?Spring Initializr。
  2. 在頁面做如下配置:
    • Project:選?Maven Project,Maven 是項目管理和構建工具,可管理項目依賴、編譯、打包等操作。
    • Language:選?Java,使用 Java 語言開發。
    • Spring Boot:選?3.3.0,即要使用的 Spring Boot 版本。
    • Group:通常是公司或組織域名倒序,如?com.example,用于唯一標識項目所屬組織或團隊。
    • Artifact:是項目名稱,如?spring - boot - knife4j - demo,是項目在 Maven 倉庫的唯一標識符。
    • Dependencies:點擊?Add Dependencies?按鈕,搜索并添加?Spring Web?依賴,Spring Web?用于開發 Web 應用,包含 Spring MVC 等核心組件。
  3. 配置完成后,點擊?Generate?按鈕,瀏覽器會下載項目壓縮包。
  4. 解壓下載的壓縮包,用喜歡的集成開發環境(IDE)打開項目。以 IntelliJ IDEA 為例,打開 IDE,選?File?->?Open,再選解壓后的項目文件夾。
方式二:使用 IDE 自帶的 Spring Initializr

若使用 IntelliJ IDEA,也可通過其自帶的 Spring Initializr 創建項目:

  1. 打開 IntelliJ IDEA,選?File?->?New?->?Project
  2. 在左側面板選?Spring Initializr,按上述步驟 2 配置。
  3. 點擊?Next,選項目存儲位置,再點擊?Finish?完成項目創建。

步驟 2:添加 Knife4j 依賴

在項目的?pom.xml?文件中添加 Knife4j 依賴。pom.xml?是 Maven 項目配置文件,用于管理項目依賴和構建信息。打開?pom.xml?文件,在?<dependencies>?標簽內添加以下代碼:

<dependencies><!-- Spring Web 依賴,用于開發 Web 應用 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Knife4j 依賴,用于生成和展示 API 文檔 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.5.0</version></dependency>
</dependencies>

添加依賴后,Maven 會自動從中央倉庫下載所需庫文件。在 IntelliJ IDEA 中,IDE 會自動檢測?pom.xml?文件變化,并提示導入依賴,點擊?Import Changes?按鈕,等待依賴下載完成。

步驟 3:?Knife4j 界面自定義配置

package org.example.test1;import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class Knife4jConfig {@Beanpublic GroupedOpenApi api4() {return GroupedOpenApi.builder().group("all").displayName("所有接口").packagesToScan("org.example.test1")// 自定義全局響應碼
//                .addOpenApiCustomizer((this::setCustomStatusCode)).build();}
}

步驟 4:創建實體類

實體類用于表示業務數據,使用 Swagger 注解為實體類和其屬性添加描述信息,以便在 API 文檔中清晰展示。

@Schema 注解用于為實體類添加描述信息,name 為實體類在文檔中的名稱,description 為詳細描述

?@Schema 注解為屬性添加描述信息,description 為屬性描述,example 為示例值

import io.swagger.v3.oas.annotations.media.Schema;// @Schema 注解用于為實體類添加描述信息,name 為實體類在文檔中的名稱,description 為詳細描述
@Schema(name = "User", description = "用戶實體類")
public class User {// @Schema 注解為屬性添加描述信息,description 為屬性描述,example 為示例值@Schema(description = "用戶 ID", example = "1")private Long id;@Schema(description = "用戶名", example = "張三")private String username;@Schema(description = "用戶郵箱", example = "666@example.com")private String email;// 構造函數、Getter 和 Setter 方法public User() {}public User(Long id, String username, String email) {this.id = id;this.username = username;this.email = email;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

步驟 5:創建 Controller

Controller 負責處理客戶端請求并返回響應。使用更多 Swagger 注解描述接口的請求參數、響應結果等信息。

// @Tag 用于對 API 接口進行分組和描述,name 為分組名稱,description 為分組詳細描述

?// @Operation 描述接口的操作信息,summary 為摘要,description 為詳細描述

?// @ApiResponses 定義接口的響應狀態碼和對應的響應信息

import io.swagger.v3.oas.annotations.Operation; // 導入Swagger Operation注解,用于描述API操作
import io.swagger.v3.oas.annotations.Parameter; // 導入Swagger Parameter注解,用于描述API參數
import io.swagger.v3.oas.annotations.media.Content; // 導入Swagger Content注解,用于定義API響應內容類型
import io.swagger.v3.oas.annotations.media.Schema; // 導入Swagger Schema注解,用于定義API響應模式
import io.swagger.v3.oas.annotations.responses.ApiResponse; // 導入Swagger ApiResponse注解,用于定義API響應信息
import io.swagger.v3.oas.annotations.responses.ApiResponses; // 導入Swagger ApiResponses注解,用于定義多個API響應信息
import io.swagger.v3.oas.annotations.tags.Tag; // 導入Swagger Tag注解,用于對API進行分組和描述
import org.springframework.web.bind.annotation.*; // 導入Spring MVC注解,用于處理HTTP請求import java.util.ArrayList; // 導入ArrayList類,用于動態數組操作
import java.util.List; // 導入List接口// @RestController 是 @Controller 和 @ResponseBody 的組合注解,標識該類是RESTful風格的控制器
@RestController
// @RequestMapping 用于映射請求的URL前綴
@RequestMapping("/api/users")
// @Tag 用于對API接口進行分組和描述,name 為分組名稱,description 為分組詳細描述
@Tag(name = "用戶管理接口", description = "提供用戶相關的操作接口")
public class UserController {private List<User> users = new ArrayList<>(); // 創建一個List集合用于存儲用戶數據// @Operation 描述接口的操作信息,summary 為摘要,description 為詳細描述@Operation(summary = "獲取所有用戶", description = "返回所有用戶的列表")// @ApiResponses 定義接口的響應狀態碼和對應的響應信息@ApiResponses(value = {// @ApiResponse 具體描述某個響應狀態碼的信息,responseCode 為響應狀態碼,description 為描述,content 為響應內容@ApiResponse(responseCode = "200", description = "成功獲取用戶列表",content = {@Content(mediaType = "application/json",// @Schema 指定響應內容的數據結構schema = @Schema(implementation = User.class))}})})@GetMappingpublic List<User> getUsers() { // 定義一個GET請求處理方法,返回用戶列表return users; // 返回用戶列表}@Operation(summary = "根據 ID 獲取用戶", description = "根據用戶 ID 獲取單個用戶信息")@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "成功獲取用戶信息",content = {@Content(mediaType = "application/json",schema = @Schema(implementation = User.class))}),@ApiResponse(responseCode = "404", description = "未找到該用戶", content = @Content)})// @Parameter 描述接口的請求參數,description 為參數描述,example 為示例值@GetMapping("/{id}")public User getUserById(@Parameter(description = "用戶 ID", example = "1") @PathVariable Long id) { // 定義一個GET請求處理方法,根據ID獲取用戶信息return users.stream() // 將用戶列表轉換為流.filter(user -> user.getId().equals(id)) // 過濾出ID匹配的用戶.findFirst() // 查找第一個匹配的用戶.orElse(null); // 如果沒有找到,返回null}@Operation(summary = "創建用戶", description = "創建一個新的用戶")@ApiResponses(value = {@ApiResponse(responseCode = "201", description = "用戶創建成功",content = {@Content(mediaType = "application/json",schema = @Schema(implementation = User.class))}})@PostMappingpublic User createUser(@Parameter(description = "用戶信息", required = true) @RequestBody User user) { // 定義一個POST請求處理方法,創建新用戶users.add(user); // 將新用戶添加到列表return user; // 返回創建的用戶}@Operation(summary = "獲取所有用戶2", description = "返回所有用戶的列表")@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "成功獲取用戶列表",content = {@Content(mediaType = "application/json",schema = @Schema(implementation = User.class))}})@GetMappingpublic List<User> getUsers2(@Parameter(name = "X-Token", description = "自定義請求頭 token", in = ParameterIn.HEADER) @RequestHeader(required = false) String token) { // 定義一個GET請求處理方法,返回用戶列表,支持自定義請求頭參數return users; // 返回用戶列表}}

步驟 6:啟動 Spring Boot 應用

在 IDE 中找到項目的啟動類(通常是包含?main?方法且帶有?@SpringBootApplication?注解的類),右鍵點擊并選擇?Run?啟動 Spring Boot 應用。啟動成功后,控制臺會輸出啟動信息,表明應用已在默認端口(通常是 8080)啟動。

步驟 7:訪問 Knife4j 文檔頁面

打開瀏覽器,訪問以下 URL 查看 Knife4j 生成的 API 文檔:http://localhost:8080/doc.html

在Springboot的yml文件中配置Knife4j ?

# Knife4j配置
# springdoc-openapi配置
springdoc:# get請求多參數時不需要添加額外的@ParameterObject和@Parameter注解default-flat-param-object: true# 啟用swaggerUIswagger-ui:#自定義swagger前端請求路徑,輸入http:127.0.0.1:8080/swagger-ui.html會自動重定向到swagger頁面path: /swagger-ui.htmlenabled: true#    tags-sorter: alpha # 標簽的排序方式 alpha:按照子母順序排序(@ApiSupport注解排序不生效,因此需要設置)#    operations-sorter: alpha # 接口的排序方式 alpha:按照子母順序排序(@ApiOperationSupport注解排序生效,因此這里不作設置)operations-sorter: order # 設置規則為order,該規則會使用Knife4j的增強排序擴展規則`x-order`# 啟用文檔,默認開啟api-docs:path: /v3/api-docs    #swagger后端請求地址enabled: true
# knife4j相關配置 可以不用改
knife4j:enable: true    #開啟knife4j,無需添加@EnableKnife4j注解setting:language: ZH_CN   # 中文:ZH_CN 英文:ENenable-swagger-models: trueenable-dynamic-parameter: falsefooter-custom-content: "<strong>Copyright ?? 2024 Keyidea. All Rights Reversed</strong>"enable-footer-custom: trueenable-footer: trueenable-document-manage: truedocuments: #文檔補充說明- name: MarkDown語法說明locations: classpath:static/markdown/grammar/*group: 01-系統接口 # 此處分組必須使用在Knife4jConfig已存在的分組名group,當存在displayName時,使用displayName名稱- name: 補充文檔locations: classpath:static/markdown/others/*group: 01-系統接口 # 此處分組必須使用在Knife4jConfig已存在的分組名group,當存在displayName時,使用displayName名稱

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73042.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73042.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73042.shtml

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

相關文章

Java 大視界 -- 區塊鏈賦能 Java 大數據:數據可信與價值流轉(84)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

K8S學習之基礎二十四:k8s的持久化存儲之pv和pvc

K8S的存儲之pv和pvc 在 Kubernetes (k8s) 中&#xff0c;持久化存儲是通過 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 來實現的。PVC 是用戶對存儲資源的請求&#xff0c;而 PV 是集群中的實際存儲資源。PVC 和 PV 的關系類似于 Pod 和 Node 的關系。 Persisten…

【Hive】Hive安裝

Hive 第一章 Hive的基礎知識 第二章 Hive安裝 第三章 DDL&#xff08;Data Definition Language&#xff09;數據定義 第四章 DML&#xff08;Data Manipulation Language&#xff09;數據操作 第五章 Hive查詢 第六章 Hive的基礎知識 第七章 Hive函數 第八章 分區表和分桶表 …

關于C/C++語言的初學者在哪刷題,怎么刷題

引言&#xff1a; 這篇博客主要是針對初學者關于怎么在網上刷題&#xff0c;以及在哪里刷題。 1.介紹平臺&#xff08;在哪刷題&#xff09;&#xff1a; 1.牛客牛客網https://www.nowcoder.com/ &#xff1a;有許多面試題&#xff0c;也有許多供學習者練習的題 2.洛谷洛谷 …

k8s面試題總結(十四)

什么是Helm&#xff1f; Helm是一個k8s的包管理工具&#xff0c;它簡化了應用程序在k8s集群中的部署&#xff0c;管理和維護。類似于rpm包和yum之間的關系。 K8s傳統方式&#xff1a;類似于rpm安裝包的方式&#xff0c;逐步進行安裝&#xff0c;遇到依賴還得解決依賴問題 he…

物理服務器的作用都有哪些?

物理服務器是一種高性能的專用服務器&#xff0c;一般會被運用在大型組織和云計算環境當中&#xff0c;可以為企業和用戶提供數據存儲和計算資源&#xff0c;幫助企業提高整體的工作效率和快速實現業務目標。 物理服務器有著較高的安全性&#xff0c;企業可以將重要的數據信息備…

01 音視頻知識學習(視頻)

圖像基礎概念 ?像素&#xff1a;像素是一個圖片的基本單位&#xff0c;pix是英語單詞picture的簡寫&#xff0c;加上英 語單詞“元素element”&#xff0c;就得到了“pixel”&#xff0c;簡稱px&#xff0c;所以“像素”有“圖像元素” 之意。 ? 分辨率&#xff1a;是指圖像…

有關MyBatis的動態SQL

有關MyBatis動態SQL MyBatis動態SQL是一種根據不同條件靈活拼接SQL語句的技術&#xff0c;基于OGNL表達式實現。動態 SQL 大大減少了編寫代碼的工作量&#xff0c;更體現了 MyBatis 的靈活性、高度可配置性和可維護性。 1.什么是動態SQL? 動態sql可以在一些需要靈活拼接sql…

react使用拖拽,縮放組件,采用react-rnd解決 -完整版

屏幕錄制2025-03-10 10.16.06 以下代碼僅提供左側可視化區域 右側數據根據你們的存儲數據來 大家直接看Rnd標簽設置的屬性即可&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; /*** 用戶拖拽水印的最終位置信息*/ export interface ProductWatermarkValue {wat…

Spring Cloud之遠程調用OpenFeign參數傳遞

目錄 OpenFeign參數傳遞 傳遞單個參數 傳遞多個參數 傳遞對象 傳遞JSON OpenFeign參數傳遞 傳遞單個參數 服務提供方product-service RequestMapping("/product") RestController public class ProductController {Autowiredprivate ProductService productSe…

每日一練之移除鏈表元素

題目&#xff1a; 畫圖解析&#xff1a; 方法&#xff1a;雙指針 解答代碼&#xff08;注&#xff1a;解答代碼帶解析&#xff09;&#xff1a; //題目給的結構體 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* }…

從零開始的python學習(五)P75+P76+P77+P78+P79+P80

本文章記錄觀看B站python教程學習筆記和實踐感悟&#xff0c;視頻鏈接&#xff1a;【花了2萬多買的Python教程全套&#xff0c;現在分享給大家&#xff0c;入門到精通(Python全棧開發教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p6&share_sourcecopy_web&v…

基于SpringBoot實現旅游酒店平臺功能八

一、前言介紹&#xff1a; 1.1 項目摘要 隨著社會的快速發展和人民生活水平的不斷提高&#xff0c;旅游已經成為人們休閑娛樂的重要方式之一。人們越來越注重生活的品質和精神文化的追求&#xff0c;旅游需求呈現出爆發式增長。這種增長不僅體現在旅游人數的增加上&#xff0…

FastAPI 分頁模塊實現詳解

1. 簡介 本文詳細介紹了一個基于 FastAPI 框架的通用分頁處理模塊的實現。該模塊提供了標準的分頁參數處理、數據切片和響應格式化功能&#xff0c;可以輕松地集成到任何 FastAPI 項目中。 2. 代碼實現 2.1 導入必要的模塊 首先&#xff0c;我們需要導入所需的模塊&#xf…

Java 學習記錄:基礎到進階之路(一)

今天&#xff0c;讓我們深入到 Java 項目構建、基礎語法及核心編程概念的領域&#xff0c;一探究竟。 軟件安裝及環境配置請查看之前更新的博客有著詳細的介紹&#xff1a; IDEA軟件安裝&環境配置&中文插件-CSDN博客 目錄 1.Java 項目構建基礎 1.項目中的 SRC 目錄…

Yashan DB 對象管理

一、什么是數據庫對象 數據庫對象是數據庫里面用來存儲和指向數據的各種概念和結構的總稱。數據庫支持的對象包括&#xff1a; ? 表&#xff1a;表是一個邏輯概念&#xff0c;是數據庫組織管理數據的基本單位。 ? 索引&#xff1a;索引是建立在表上的邏輯對象&#xff0c;索…

deepseek 3FS編譯

3FS在ubuntu22.04下的編譯&#xff08;記錄下編譯過程&#xff0c;方便后續使用&#xff09; 環境信息 OS ubuntu 22.04內核版本 6.8.0-52-genericlibfuse 3.16.1rust 1.75.0FoundationDB 7.1.66meson 1.0.0ninja 1.10.1 libfuse編譯 以下建議均在root下執行 pip3 install…

python-uiautomator2 安裝教程

目錄 一、簡介 二、支持平臺及語言 三、工作原理 四、安裝 一、簡介 uiautomator2是一個python庫&#xff0c;用于Android的UI自動化測試&#xff0c;其底層基于Google uiautomator&#xff0c;Google提供的uiautomator庫可以獲取屏幕上任意一個APP的任意一個控件屬性&…

無頭瀏覽器與請求簽名技術-Cloudflare防護

在實際數據采集實踐中&#xff0c;許多目標網站&#xff08;例如 Amazon&#xff09;都會采用 Cloudflare 等防護措施&#xff0c;防止機器人和非正常流量。本文將分享一個故障場景下的排查與改進方案&#xff0c;講述如何利用無頭瀏覽器、請求簽名技術以及爬蟲代理 IP來實現數…

Spring Cloud之注冊中心之Nacos健康監測和環境隔離

目錄 Nacos健康檢查 兩種健康檢查機制 Nacos服務類型實例 Nacos環境隔離 創建namespace 配置namespace Nacos健康檢查 兩種健康檢查機制 Nacos作為注冊中?, 需要感知服務的健康狀態, 才能為服務調??提供良好的服務. Nacos 中提供了兩種健康檢查機制&#xff1a; 客?…