SpringBoot3.3集成knif4j-swagger文檔方式和使用案例

springboot3 集成 knif4j :

訪問地址:

swagger 接口文檔默認地址:http://localhost:8080/swagger-ui.html#

Knife4j 接口文檔默認地址:http://127.0.0.1:8080/doc.html

Maven:

    <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.3.0</version></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId><version>${knife4j-openapi3.version}</version></dependency>

基礎微服務配置:


knife4j:# 開啟增強配置enable: truebasic:enable: true# Basic認證用戶名username: babasic# Basic認證密碼password: BaBasic123!@#plm## 開啟生產環境屏蔽,一定要先開啟knife4j增強才會生效## You do not have permission to access this pageproduction: false

網關配置:

knife4j:gateway:enabled: true# 排序規則(tag/operation排序自4.2.0版本新增)# 取值:alpha-默認排序規則,官方swagger-ui默認實現,order-Knife4j提供的增強排序規則,開發者可擴展x-order,根據數值來自定義排序tags-sorter: orderoperations-sorter: order# 指定服務發現的模式聚合微服務文檔strategy: manualroutes:- name: App1服務# 子服務存在其他分組情況,聚合其他分組url: /app1/v3/api-docs# 服務名稱(Optional)service-name: baian-cloud-test-app1# 路由前綴context-path: /app1# 排序order: 1- name: App2服務# 子服務存在其他分組情況,聚合其他分組url: /app2/v3/api-docs# 服務名稱(Optional)service-name: baian-cloud-test-app2# 路由前綴context-path: /app2# 排序order: 2- name: App3服務# 子服務存在其他分組情況,聚合其他分組url: /app3/v3/api-docs# 服務名稱(Optional)service-name: baian-cloud-test-app3# 路由前綴context-path: /app3# 排序order: 3

全局添加自定義頭

package com.baian.common.core.config;import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.parameters.HeaderParameter;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import lombok.extern.slf4j.Slf4j;
import org.springdoc.core.customizers.GlobalOpenApiCustomizer;
import org.springdoc.core.customizers.GlobalOperationCustomizer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.method.HandlerMethod;import java.util.List;/*** @program: baian-cloud* @description: 為每個接口添加鑒權* @author: <航跡者-694204477@qq.com>* @create: 2024-07-02 10:21**/
@Slf4j
@Configuration
public class Knife4jOperationCustomizer {@Value("${sa-token.token-name:Authorization}")private String securityHeaderName;@Beanpublic GlobalOpenApiCustomizer orderGlobalOpenApiCustomizer() {return openApi -> {// 全局添加鑒權參數if (openApi.getPaths() != null) {HeaderParameter parametersItem = new HeaderParameter();parametersItem.setName(securityHeaderName);parametersItem.setRequired(false);Schema<String> schema = new Schema<>();schema.setType("string");parametersItem.setSchema(schema);openApi.getPaths().forEach((s, pathItem) -> {pathItem.readOperations().forEach(operation -> {// 為所有接口添加請求頭operation.addParametersItem(parametersItem);// 為所有接口添加鑒權
//                        operation.addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION));});});}};}
}// https://doc.xiaominfo.com/docs/blog/add-authorization-header

注解:Springfox改用Springdoc后,注解改變:

@Api → @Tag@ApiIgnore → @Parameter(hidden = true) or @Operation(hidden = true) or @Hidden@ApiImplicitParam → @Parameter@ApiImplicitParams → @Parameters@ApiModel → @Schema@ApiModelProperty(hidden = true) → @Schema(accessMode = READ_ONLY)@ApiModelProperty → @Schema@ApiOperation(value = "foo", notes = "bar") → @Operation(summary = "foo", description = "bar")@ApiParam → @Parameter@ApiResponse(code = 404, message = "foo") → @ApiResponse(responseCode = "404", description = "foo")

實用新增注解:

@ParameterObject 

案例

@Tag(name = "用戶接口")
@RestController
@RequestMapping("sys/user")
public class SysUserController {@Resourceprivate ISysUserService sysUserService;@Operation(summary = "分頁查詢")@GetMapping("page")public AjaxResult queryPage(@ParameterObject SysUserPageDTO dto) {PageInfo page = sysUserService.queryPage(dto);return AjaxResult.success(page);}@Operation(summary = "詳情")@GetMapping("{id}")public AjaxResult queryInfo(@PathVariable Long id) {SysUserDTO dto = sysUserService.queryById(id);return AjaxResult.success(dto);}@Operation(summary = "新增")@PostMappingpublic AjaxResult save(@RequestBody SysUserDTO dto) {Long id = sysUserService.saveInfo(dto);return AjaxResult.success(id);}
}
@Getter
@Setter
@TableName("user")
@Schema(name = "User", description = "$!{table.comment}")
public class User implements Serializable {private static final long serialVersionUID = 1L;@Schema(description = "主鍵")@TableId("id")private Long id;@Schema(description = "用戶名")@TableField("name")private String name;@Schema(description = "手機號")@TableField("phone")private String phone;@Schema(description = "性別")@TableField("sex")private String sex;@Schema(description = "狀態 0:禁用,1:正常")@TableField("status")private Integer status;
}

其他參考:

https://gitee.com/-/ide/project/xiaoym/swagger-bootstrap-ui-demo/edit/master/-/knife4j-spring-boot3-demo/src/main/java/com/github/xiaoymin/boot3/config/SwaggerConfig.java

https://blog.csdn.net/m0_74055560/article/details/134348304

福利配置: 自動轉發。

package com.baian.common.core.config;import io.undertow.servlet.spec.HttpServletRequestImpl;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;/*** @program: baian-cloud* @description: resource* @author: <航跡者-694204477@qq.com>* @create: 2024-07-02 08:51**/
@RestController
@Slf4j
public class BaiAnResourceCtl {@GetMapping("/")public void context(HttpServletRequest request, HttpServletResponse response) throws IOException {log.error("=====baian-cloud-common-web-core=======com.baian.common.core.config.BaiAnResourceCtl=================默認根path/====重定向到/doc.html==========");if (request instanceof HttpServletRequestImpl undertow) {String resolvedPath = undertow.getExchange().getResolvedPath();response.sendRedirect(resolvedPath + "/doc.html");return;}response.sendRedirect("/doc.html");}}

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

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

相關文章

2024 COMMUNITY DAY User Group 社區嘉年華 云計算與 AI 技術交融盛會共筑多元智慧未來

亞馬遜云科技User Group&#xff0c;深圳 Community Day 活動流程搶先知道&#xff01; ? 7月7日 &#x1f3e0; 深圳南山區香港中文大學 &#x1f4e3;主論壇國際大咖云集&#xff0c;共襄科技盛宴&#xff01; &#x1f389;三大主題論壇&#xff1a;人工智能、大數據、動…

MyBatis系列三: XxxMapper.xml-SQL映射文件

XxxMapper.xml-SQL映射文件 官方文檔基本介紹詳細說明基本使用parameterType(輸入參數類型)傳入HashMapresultMap(結果集映射) 官方文檔 文檔地址: https://mybatis.org/mybatis-3/zh_CN/sqlmap-xml.html 基本介紹 1.MyBatis的真正強大在于它的語句映射(在XxxMapper.xml配置…

2024年06月CCF-GESP編程能力等級認證Python編程一級真題解析

本文收錄于專欄《Python等級認證CCF-GESP真題解析》,專欄總目錄:點這里,訂閱后可閱讀專欄內所有文章。 一、單選題(每題 2 分,共 30 分) 第 1 題 小楊父母帶他到某培訓機構給他報名參加CCF組織的GESP認證考試的第1級,那他可以選擇的認證語言有幾種?( ) A. 1 B. 2 C…

React@16.x(45)路由v5.x(10)源碼(2)- history

目錄 1&#xff0c;作用1.1&#xff0c;createBrowserHistory1.2&#xff0c;createHashHistory1.3&#xff0c;createMemoryHistory 2&#xff0c;history 對象的屬性2.1&#xff0c;action2.2&#xff0c;push / replace / go / goBack / goForward2.3&#xff0c;location2.…

網絡配線架的隱藏功能

網絡布線是確保現代信息社會高效運轉的關鍵技術之一。在這一領域&#xff0c;網絡配線架扮演著至關重要 的角色。它不僅僅是一個簡單的物理連接點&#xff0c;更擁有許多隱藏功能&#xff0c;這些功能極大地提升了網絡的 效率、穩定性和可管理性。 1、集中管理 網絡配線架提…

【BES2500x系列 -- RTX5操作系統】深入探索CMSIS-RTOS RTX -- 同步與通信篇 -- 消息隊列和郵箱處理 --(四)

&#x1f48c; 所屬專欄&#xff1a;【BES2500x系列】 &#x1f600; 作??者&#xff1a;我是夜闌的狗&#x1f436; &#x1f680; 個人簡介&#xff1a;一個正在努力學技術的CV工程師&#xff0c;專注基礎和實戰分享 &#xff0c;歡迎咨詢&#xff01; &#x1f49…

經典FC游戲web模擬器--EmulatorJS

簡介 EmulatorJS是一個基于JavaScript和Webassembly技術的虛擬環境的實現&#xff0c;可以在網頁中運行各種經典FC游戲系統&#xff0c;支持任天堂、世嘉、雅達利等經典紅白機。EmulatorJS的誕生使得諸如超級瑪麗、坦克大戰、魂斗羅等經典FC游戲能夠以一種全新的方式回歸。本文…

SAP MM模塊的ATP檢查

前面幾篇文章都演示和說明ATP的一些設置和操作&#xff0c;通常情況下ATP的檢查PP模塊&#xff0c;SD模塊用的相對來說是比較多的&#xff0c;但是實際上MM模塊也會遵循ATP的可用性的檢查規則。 當我們在做311、301等移動類型時&#xff0c;系統會根據相應的可用性檢查規則&am…

Linux常用指令匯總

Linux常用指令匯總 Cfilt 功能&#xff1a;解析C程序中被修飾的符號&#xff0c;比如變量與函數名稱。 示例&#xff1a; 解析編譯器 g 修飾的函數名稱。 cfilt -s gnu-v3 _Z5printRKSs print(std::basic_string<char, std::char_traits<char>, std::allocator<…

Django 多對多關系

多對多關系作用 Django 中&#xff0c;多對多關系模型的作用主要是為了表示兩個模型之間的多對多關系。具體來說&#xff0c;多對多關系允許一個模型的實例與另一個模型的多個實例相關聯&#xff0c;反之亦然。這在很多實際應用場景中非常有用&#xff0c;比如&#xff1a; 博…

【每日一個Git命令: cherry-pick】

git cherry-pick 命令的作用是將指定的提交&#xff08;commit&#xff09;應用到其他分支上。這個命令允許你選擇一個或多個已有的提交&#xff0c;并將它們作為新的提交引入到當前分支中。 這個過程不會改變項目的歷史記錄&#xff0c;因為它實際上是創建了這些提交的副本。…

BMA530 運動傳感器

型號簡介 BMA530是博世&#xff08;bosch-sensortec&#xff09;的一款運動傳感器。時尚簡約的可穿戴設備為功能強大的組件提供了很小的空間。具有先進功能集的下一代加速度計是世界上最小的加速度傳感器&#xff08;1.2 x 0.8 x 0.55 mm&#xff09;。它專為緊湊型設備而設計&…

24/07/02數據結構(1.1201)算法效率順序表

數據結構基本內容:1.時間復雜度 空間復雜度2.順序表鏈表3.棧 隊列4.二叉樹5.排序 數據結構是存儲,組織數據的方式.指相互之間存在一種或多種特定關系的數據元素的集合 算法是定義良好的計算過程.取一個或一組值為輸入并產生一個或一組值為輸出. 需要知道雖然選擇題有20-30個…

Leetcode1114 交替打印 FooBar及其測試

題目描述 相關標簽 相關企業 給你一個類&#xff1a; class FooBar { public void foo() { for (int i 0; i < n; i) { print(“foo”); } } public void bar() { for (int i 0; i < n; i) { print(“bar”); } } } 兩個不同的線程將會共用一個 FooBar 實例&#xf…

python自動化運維--DNS處理模塊dnspython

1.dnspython介紹 dnspython是Pyhton實現的一個DNS工具包&#xff0c;他幾乎支持所有的記錄類型&#xff0c;可以用于查詢、傳輸并動態更新ZONE信息&#xff0c;同事支持TSIG&#xff08;事物簽名&#xff09;驗證消息和EDNS0&#xff08;擴展DNS&#xff09;。在系統管理方面&a…

Linux高并發服務器開發(九)Tcp狀態轉移和IO多路復用

文章目錄 0 包裹函數1 多進程服務器流程代碼 2 多線程服務器3 TCP狀態轉移半關閉心跳包 4 端口復用5 IO多路復用技術高并發服務器 6 select代碼總結 7 POLLAPI代碼poll相對select的優缺點 8 epoll&#xff08;重點&#xff09;API監聽管道代碼EPOLL 高并發服務器 9 Epoll的兩種…

Iot解決方案開發的體系結構模式和技術

前言 Foreword 計算機技術起源于20世紀40年代&#xff0c;最初專注于數學問題的基本原理&#xff1b;到了60年代和70年代&#xff0c;它以符號系統為中心&#xff0c;該領域首先開始面臨復雜性問題&#xff1b;到80年代&#xff0c;隨著個人計算的興起和人機交互的問題&#x…

【進階篇】Java 項目中對使用遞歸的理解分享

前言 筆者在最近的項目開發中&#xff0c;遇到了兩個父子關系緊密相關的場景&#xff1a;評論樹結構、部門樹結構。具體的需求如&#xff1a;找出某條評論下的所有子評論id集合&#xff0c;找出某個部門下所有的子部門id集合。 在之前的項目開發經驗中&#xff0c;遞歸使用得是…

centos7安裝python3.10

文章目錄 1. 安裝依賴項2. 下載Python 3.10源碼3. 解壓源碼并進入目錄4. 配置安裝選項5. 編譯并安裝Python6. 驗證安裝7.創建軟連接8. 安裝pip39. 換源 1. 安裝依賴項 sudo yum groupinstall -y "Development Tools" sudo yum install -y openssl-devel bzip2-devel…

Eureka的自擴展之道:服務自動擴展的秘訣

&#x1f31f; Eureka的自擴展之道&#xff1a;服務自動擴展的秘訣 在微服務架構中&#xff0c;服務的自動擴展是實現高可用性和彈性伸縮的關鍵。Eureka作為Netflix開源的服務發現框架&#xff0c;提供了一套機制來支持服務的自動擴展。本文將詳細介紹Eureka如何實現服務的自動…