從零開始搭建企業管理系統(四):集成 Knife4j

集成 Knife4j

    • 前言
    • Knife4j是什么
    • 集成 Knife4j
      • 引入 pom 依賴
      • 添加基礎配置
      • 啟動程序測試
      • 完善文檔信息
        • 編寫配置類
        • 修改 UserController
        • 修改 UserEntity
        • 修改 BaseEntity
      • 文檔效果圖
        • swagger 界面
        • knife4j 界面

前言

前面一小節我們使用postman來進行接口的調試,如果接口一多,就很不方便進行管理,也不方便調試,所以我們本小節集成一個接口文檔組件Knife4j,有疑問可以查看 Knife4j 官網。

Knife4j是什么

Knife4j是一個集Swagger2 和 OpenAPI3 為一體的增強解決方案

Knife4j 是為 Java MVC 框架集成 Swagger 生成 Api 文檔的增強解決方案,前身是 swagger-bootstrap-ui,致力于 springfox-swagger 的增強 UI 實現。knife4j 為了契合微服務的架構發展,由于原來 swagger-bootstrap-ui 采用的是后端 Java 代碼 + 前端 UI 混合打包的方式,在微服務架構下顯的很臃腫,因此項目正式更名為 knife4j,更名后主要專注的方面如下:

  • 后端 Java 代碼以及前端 UI 模塊進行了分離,在微服務架構下使用更加靈活
  • 提供專注于 Swagger 的增強解決方案,不同于只是單純增強前端 UI 部分

集成 Knife4j

我們參考 Knife4j 官網的教程進行集成。

因為我們的 Spring Boot 版本是 3.2.0,所以只支持 OpenAPI3 規范

  • Spring Boot 3 只支持OpenAPI3規范
  • Knife4j提供的starter已經引用springdoc-openapi的jar,開發者需注意避免jar包沖突

引入 pom 依賴

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

添加基礎配置

引入之后,其余的配置,開發者即可完全參考springdoc-openapi的項目說明,Knife4j只提供了增強部分,如果要啟用Knife4j的增強功能,可以在配置文件中進行開啟

官網提供的部分配置如下,我們修改一下相關信息:

# springdoc-openapi項目配置
springdoc:swagger-ui:# swagger ui 路徑path: /swagger-ui.html# 排序方式 alpha 按字母順序tags-sorter: alphaoperations-sorter: alphaapi-docs:# 接口文檔路徑path: /v3/api-docsgroup-configs:- group: 'sys'paths-to-match: '/**'packages-to-scan: com.xm.module.sys
# knife4j的增強配置,不需要增強可以不配
knife4j:enable: truesetting:language: zh_cn

啟動程序測試

配置好了之后,我們就可以啟動程序,訪問我們剛才配置的路徑了,這里有三個路徑,我們分別用瀏覽器訪問看看。

1、/swagger-ui.html,這是 swagger-ui 的頁面,Springdoc本身也是集成了Swagger3

在這里插入圖片描述

2、/v3/api-docs,這就是 Springdoc 的接口接口文檔,可以導入到 postman 等工具中。

在這里插入圖片描述

3、/doc.html,這是 Knife4j 的默認界面,可以理解為是 swagger-ui 的增強版,展示的內容一樣,只是展示的 ui 變了。

在這里插入圖片描述

完善文檔信息

ok,我們上面只是將 Knife4j 引入到我們的項目中了,但是里面的接口信息還都是默認的,可以通過 swagger-ui 界面看到,有一個 user-controller,下面有多個接口,都是默認的名稱,這樣我們將文檔給別人或前端,理解起來會很困難,所以我們在開發中,是要補全這些信息的,完善一份持續維護的接口文檔。

所以,最后一步就是使用 OpenAPI3 的規范注解,注釋各個 Spring 的 REST 接口。我們先來看看 swagger2 和 openAPI3 的注解差別。

Spwagger2和OpenApi3注解的對應關系

Swagger 2OpenAPI 3注解位置
@Api@Tag(name = “接口類描述”)Controller 類上
@ApiOperation@Operation(summary = “接口方法描述”)Controller 方法上
@ApiImplicitParams@ParametersController 方法上
@ApiImplicitParam@Parameter(description = “參數描述”)Controller 方法上 @Parameters 里
@ApiParam@Parameter(description = “參數描述”)Controller 方法的參數上
@ApiIgnore@Parameter(hidden = true) 或 @Operation(hidden = true) 或 @Hidden-
@ApiModel@SchemaDTO類上
@ApiModelProperty@SchemaDTO屬性上
編寫配置類

首先添加一個配置類,配置一些項目相關的信息。

@Configuration
public class SpringDocConfig {@Beanpublic OpenAPI openApi() {return new OpenAPI().info(new Info().title("XM-ADMIN系統接口文檔").version("1.0").description("一個數據中臺項目的接口文檔").termsOfService("http://localhost:9527/").contact(new Contact().name("xiaoming").url("https://github.com/shixiaomingya")).license(new License().name("Apache 2.0").url("http://localhost:9527/")));}}
修改 UserController
@Tag(name = "用戶管理")
@RestController
@RequestMapping("/sys/user")
public class UserController {@Resourceprivate UserService userService;@GetMapping("/{id}")@Operation(summary = "根據用戶ID查詢用戶")public UserEntity get(@PathVariable Long id) {return userService.get(id);}@GetMapping("/list")@Operation(summary = "查詢全部")public List<UserEntity> lists() {return userService.lists();}@GetMapping("/page")@Operation(summary = "分頁查詢")public Page<UserEntity> page(int page, int size) {return userService.page(PageRequest.of(page - 1, size));}@PostMapping@Operation(summary = "新增用戶")public void save(@RequestBody UserEntity user) {userService.save(user);}@PutMapping@Operation(summary = "修改用戶")public void update(@RequestBody UserEntity user) {userService.update(user);}@DeleteMapping("/{id}")@Operation(summary = "根據用戶ID刪除用戶")public void delete(@PathVariable Long id) {userService.delete(id);}
}
修改 UserEntity
@Data
@Entity
@Table(name = "sys_user")
@Schema(description = "用戶實體")
public class UserEntity extends BaseEntity implements Serializable {/*** Id 表示為表 ID* GenerationType.IDENTITY 使用自增長主鍵*/@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Schema(description = "用戶ID")private Long id;/*** REQUIRED 表示用戶必填*/@Schema(description = "用戶名稱", requiredMode = Schema.RequiredMode.REQUIRED)private String name;@Schema(description = "用戶昵稱")private String nickname;@Schema(description = "用戶年齡")private Integer age;@Schema(description = "用戶郵箱")private String email;/*** hidden 表示不在文檔中顯示該字段*/@Schema(description = "用戶密碼", requiredMode = Schema.RequiredMode.REQUIRED, hidden = true)private String password;
}
修改 BaseEntity
@Data
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Schema(description = "基礎實體")
public class BaseEntity {@CreatedBy@Column(name = "create_user", updatable = false)@Schema(description = "創建用戶")private String createUser;@LastModifiedBy@Column(name = "update_user")@Schema(description = "修改用戶")private String updateUser;@CreatedDate@Column(name = "create_time", updatable = false)@Schema(description = "創建時間")private Date createTime;@LastModifiedDate@Column(name = "update_time")@Schema(description = "修改時間")private Date updateTime;
}

文檔效果圖

swagger 界面

在這里插入圖片描述
在這里插入圖片描述

knife4j 界面

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

游戲王的題解

目錄 原題&#xff1a; 時間&#xff1a;1s 空間&#xff1a;256M 題目描述 輸入格式 輸出格式 樣例輸入 樣例輸出 題目大意&#xff1a; 主要思路&#xff1a; dp轉移&#xff1a; dp初始化&#xff1a; 代碼&#xff1a; 原題&#xff1a; 時間&#xff1a;1s …

springboot集成knife4j詳細教程

使用原生的swagger作為接口文檔&#xff0c;功能不夠強大&#xff0c;并且默認的ui比較簡陋&#xff0c;不符合大眾審美。所以實際開發中推薦使用knife4j對swagger進行增強。knife4j的地址&#xff1a;https://gitee.com/xiaoym/knife4j 基本使用 想要使用knife4j非常簡單&…

深入學習Redis:從入門到實戰

Redis快速入門 1.初識Redis1.1.認識NoSQL1.1.1.結構化與非結構化1.1.2.關聯和非關聯1.1.3.查詢方式1.1.4.事務1.1.5.總結 1.2.認識Redis1.3.安裝Redis1.3.1.依賴庫1.3.2.上傳安裝包并解壓1.3.3.啟動1.3.4.默認啟動1.3.5.指定配置啟動1.3.6.開機自啟 1.4.Redis桌面客戶端1.4.1.R…

【VS Code開發】使用Live Server搭建MENJA小游戲并發布至公網遠程訪問

文章目錄 前言1. 編寫MENJA小游戲2. 安裝cpolar內網穿透3. 配置MENJA小游戲公網訪問地址4. 實現公網訪問MENJA小游戲5. 固定MENJA小游戲公網地址 前言 本篇教程&#xff0c;我們將通過VS Code實現遠程開發MENJA小游戲&#xff0c;并通過cpolar內網穿透發布到公網&#xff0c;分…

C++ //習題3.8 寫出下面各邏輯表達式的值。設a=3,b=4,c=5。

C程序設計 &#xff08;第三版&#xff09; 譚浩強 習題3.8 習題3.8 寫出下面各邏輯表達式的值。設a3&#xff0c;b4&#xff0c;c5。 (1) a b > c && b c (2) a || b c && b - c (3) !(a > b) && !c || 1 (4) !(x a) && (y b…

FastAPI之響應狀態碼

使用FastAPI自定義響應狀態碼 FastAPI 是一個現代、快速的 web 框架&#xff0c;用于構建API服務&#xff0c;它允許你通過Python 3.6及以上版本進行編程。一個重要的API設計是返回合適的響應狀態碼&#xff0c;這可以使得客戶端理解服務端的處理結果。本教程將向你展示如何在…

推出 Amazon EC2 C7i 實例

亞馬遜云科技宣布全面推出由定制的第 4 代英特爾至強可擴展處理器&#xff08;代號為 Sapphire Rapids&#xff09;提供支持的 Amazon Elastic Compute Cloud (Amazon EC2) C7i 實例。這些定制處理器僅在亞馬遜云科技上可用&#xff0c;與其他云提供商使用的基于 x86 的同類英特…

Kafka事務是怎么實現的?Kafka事務消息原理詳解

目錄 一、Kafka事務性消息1.1 介紹Kafka事務性消息1.2 事務性消息的應用場景1.3 Kafka事務性消息的優勢 二、Kafka事務性消息的使用2.1 配置Kafka以支持事務性消息生產者配置消費者配置 2.2 生產者&#xff1a;發送事務性消息創建Kafka生產者開始事務發送消息提交或中止事務 2.…

logstash之grok插件自定義規則學習

文章目錄 1、前言2、Grok提供的常用Patterns說明及舉例2.1 常用的表達式說明 3、使用grok插件進行日志字段處理4、案例1&#xff1a;處理nginx的日志4.1、查看nginx日志格式4.2、對nginx的日志進行過濾處理 5、案例2&#xff1a;處理tomcat的日志5.1、[安裝logstash-filter-mul…

外包干了3個月,技術退步明顯.......

先說一下自己的情況&#xff0c;大專生&#xff0c;18年通過校招進入武漢某軟件公司&#xff0c;干了接近4年的功能測試&#xff0c;今年年初&#xff0c;感覺自己不能夠在這樣下去了&#xff0c;長時間呆在一個舒適的環境會讓一個人墮落! 而我已經在一個企業干了四年的功能測…

【MySQL】在 Centos7 環境下安裝 MySQL

環境搭建 一、檢查環境二、檢查系統安裝包三、安裝 mysql yum 源四、安裝 mysql 服務五、啟動服務六、登錄 mysql七、配置 my.cnf 注意&#xff0c;我們搭建的 mysql 環境是在 Linux 的 Centos7 環境下安裝的~ 一、檢查環境 注意&#xff0c;我們在安裝和卸載中&#xff0c;先…

pytorch 中 drop_last與 nn.Parameter

1. drop_last 在使用深度學習&#xff0c;pytorch 的DataLoader 中&#xff0c; from torch.utils.data import DataLoader# Define your dataset and other necessary configurations # Create DataLoader train_loader DataLoader(dataset, batch_sizebatch_size, drop_la…

vue項目列表跳轉詳情返回列表頁保留搜索條件

需求 列表進入詳情后&#xff0c;返回詳情的時候保留搜索的條件&#xff0c;第幾頁進入的返回還在第幾頁 1.在詳情頁設置定義一個字段 mounted() {sessionStorage.setItem("msgInfo", true);},2.在獲取列表數據的時候在mounted里面判斷定義的字段 if (sessionStor…

【EI會議征稿】第二屆純數學、應用數學與計算數學國際學術會議(PACM 2024)

第二屆純數學、應用數學與計算數學國際學術會議&#xff08;PACM 2024&#xff09; 2024 2nd International Cnference on Pure, Applied and Computational Mathematics (PACM 2024) 第二屆純數學、應用數學計算數學國際學術會議 (PACM2024) 將于2024年1月19-21日在中國廈門隆…

報錯:AttributeError: ‘DataFrame‘ object has no attribute ‘reshape‘

這個錯誤通常發生在你試圖在 Pandas DataFrame 上直接使用 reshape 方法時。reshape 方法通常與 NumPy 數組相關聯&#xff0c;而不是 Pandas DataFrame。 如果你正在使用 Pandas DataFrame 并希望重新塑造它&#xff0c;你應該使用 Pandas 的重塑函數&#xff0c;如 pivot、m…

linux常用命令大全50個Linux常用命令

Linux有許多常用的命令&#xff0c;這些命令可以用來管理文件、運行程序、查看系統狀態等。以下是一些常用的Linux命令&#xff1a; pwd&#xff1a;顯示當前所在的工作目錄的全路徑名稱。cd&#xff1a;用于更改當前工作目錄&#xff0c;例如&#xff0c;若要進入Documents目…

UE5 樹葉飄落 學習筆記

一個Plane是由兩個三角形構成的&#xff0c;所以World Position Offset&#xff0c;只會從中間這條線折疊 所有材質 這里前幾篇博客有說這種邏輯&#xff0c;就是做一個對稱的漸變數值 這里用粒子的A值來做樹葉折疊的程度&#xff0c;當然你也可以用Dynamic Param 這樣就可以讓…

Android 11.0 長按按鍵切換SIM卡默認移動數據

Android 11.0 長按按鍵切換SIM卡默認移動數據 近來收到客戶需求想要通過長按按鍵實現切換SIM卡默認移動數據的功能&#xff0c;該功能主要通過長按按鍵發送廣播來實現&#xff0c;具體修改參照如下&#xff1a; 首先創建廣播&#xff0c;具體修改參照如下&#xff1a; /vend…

麒麟KYLINOS上刪除多余有線連接

原文鏈接&#xff1a;麒麟KYLINOS上刪除多余網絡有線連接 hello&#xff0c;大家好啊&#xff0c;今天我要給大家介紹的是在麒麟KYLINOS操作系統中&#xff0c;如何刪除通過Parallels Desktop虛擬機安裝時產生的多余有線連接。在使用Parallels Desktop虛擬機安裝麒麟桌面操作系…