Spring Boot集成Swagger API文檔:傻瓜式零基礎教程

Springfox Swagger 是一個用于構建基于 Spring Boot 的?RESTful API?文檔的開源工具。它通過使用注解來描述 API 端點,自動生成易于閱讀和理解的 API 文檔。Springfox 通過在運行時檢查應用程序,基于 Spring 配置、類結構和各種編譯時 Java 注釋來推斷 API 語義。

在 Java 項目中使用 Springfox 有以下好處:

  1. 自動生成 API 文檔:Springfox 可以幫助我們自動生成描述 API 的 JSON 文件(Swagger 2.0規范),這使得 API 文檔的編寫變得非常容易和高效。
  2. 可視化 API 文檔:Springfox 還提供了一個?Swagger UI,可以將 API 規范以交互式文檔的形式展示出來,使得開發者和用戶可以更加直觀地理解和使用 API。
  3. 減少重復勞動:使用 Springfox 可以減少開發人員編寫和維護 API 文檔的工作量,從而提高開發效率。

需要注意的是,Springfox 3.x 版本已經移除了對 Guava 和其他第三方庫的依賴,因此如果之前使用了 Guava predicates/functions,需要將其轉換為 Java 8 函數接口。同時,在 SpringBoot 項目中整合 Springfox 通常需要用到兩個依賴:springfox-swagger2 和 springfox-swagger-ui。

快速上手 springfox

安裝依賴

如果是新項目,添加以下為 maven 依賴

<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>

Gradle 則添加這個

  implementation "io.springfox:springfox-boot-starter:<version>"

Swagger 配置入口


@SpringBootApplication
@EnableSwagger2 //支持 swagger 2.0 spec
@EnableOpenApi //支持 open api 3.0.3 spec
public class Application {public static void main(String[] args) {ApplicationContext ctx = SpringApplication.run(Application.class, args);}@Beanpublic PetController petController() {return new PetController();}

引入 swagger UI

<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>3.0.0</version>
</dependency>

設置 Swagger UI 靜態資源目錄


@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}

試試修改 Controller

@RestController
public class CustomController {@RequestMapping(value = "/custom", method = RequestMethod.POST)public String custom() {return "custom";}
}

Entity 校驗

@Entity
public class User {//...@NotNull(message = "First Name cannot be null")private String firstName;@Min(value = 15, message = "Age should not be less than 15")@Max(value = 65, message = "Age should not be greater than 65")private int age;
}

瀏覽器驗證 Json 文件

訪問?http://localhost:8080/api/v2/api-docs,如果配置沒問題的話,就可以拿到?swagger spec 文件。

訪問?http://localhost:8080/swagger-ui/?看是否能夠看到 Swagger UI。

Swagger UI

Swagger UI

示例代碼

以下是一個基于 Springfox Swagger 的代碼示例:

@RestController
@RequestMapping("/api/v1/users")
@Api(tags = "User Management", description = "Operations for managing users")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")@ApiOperation(value = "Get user by ID", notes = "Get the user information by user ID")@ApiResponses(value = {@ApiResponse(code = 200, message = "Successfully retrieved user information"),@ApiResponse(code = 404, message = "User not found"),@ApiResponse(code = 500, message = "Internal server error")})public ResponseEntity<User> getUserById(@PathVariable("id") Long id) {User user = userService.getUserById(id);if (user == null) {return ResponseEntity.notFound().build();}return ResponseEntity.ok(user);}@PostMapping@ApiOperation(value = "Create user", notes = "Create a new user with the given user information")@ApiResponses(value = {@ApiResponse(code = 201, message = "Successfully created user"),@ApiResponse(code = 400, message = "Invalid request body"),@ApiResponse(code = 500, message = "Internal server error")})public ResponseEntity<User> createUser(@RequestBody @Valid User user) {User newUser = userService.createUser(user);return ResponseEntity.created(URI.create("/api/v1/users/" + newUser.getId())).body(newUser);}@PutMapping("/{id}")@ApiOperation(value = "Update user", notes = "Update an existing user with the given user information")@ApiResponses(value = {@ApiResponse(code = 200, message = "Successfully updated user"),@ApiResponse(code = 400, message = "Invalid request body"),@ApiResponse(code = 404, message = "User not found"),@ApiResponse(code = 500, message = "Internal server error")})public ResponseEntity<User> updateUser(@PathVariable("id") Long id, @RequestBody @Valid User user) {User updatedUser = userService.updateUser(id, user);if (updatedUser == null) {return ResponseEntity.notFound().build();}return ResponseEntity.ok(updatedUser);}@DeleteMapping("/{id}")@ApiOperation(value = "Delete user", notes = "Delete an existing user by user ID")@ApiResponses(value = {@ApiResponse(code = 204, message = "Successfully deleted user"),@ApiResponse(code = 404, message = "User not found"),@ApiResponse(code = 500, message = "Internal server error")})public ResponseEntity<Void> deleteUser(@PathVariable("id") Long id) {boolean deleted = userService.deleteUser(id);if (deleted) {return ResponseEntity.noContent().build();}return ResponseEntity.notFound().build();}
}

在上述示例代碼中,使用了多個注解來描述 API 端點,例如:

  • @RestController:標識該類為一個 RESTful API 的控制器。
  • @RequestMapping:標識該控制器中所有 API 端點的基本路徑。
  • @GetMapping@PostMapping@PutMapping@DeleteMapping:分別表示 GET、POST、PUT 和 DELETE 請求的 API 端點。
  • @Api:用于為該控制器中所有 API 端點添加一個描述性的標簽和說明。
  • @ApiOperation:用于為單個 API 端點添加一個描述性的標簽和說明。
  • @ApiResponses:用于為單個 API 端點添加一個或多個可能的響應消息。

除了上述注解之外,示例代碼還包括了其他的注解,如?@PathVariable@RequestBody@Valid?等。這些注解用于描述 API 端點的輸入參數和返回結果。

在添加了注解之后,開發人員可以使用 Springfox Swagger 來自動生成 API 文檔。例如,通過訪問?/v2/api-docs?端點,可以獲取生成的 Swagger JSON 文件。另外,通過訪問?/swagger-ui.html?端點,可以獲取一個可視化的 Swagger UI 界面,用于查看和測試 API 端點。

好用的 API 開發者工具

Springfox Swagger 是一個功能強大的工具,但也有一些缺點:

  1. 學習成本高:使用 Springfox Swagger 需要掌握大量的注解和配置,這需要一定的學習成本。特別是對于初學者來說,可能需要花費更多的時間來了解和掌握 Springfox Swagger 的使用方法。
  2. 文檔生成的細節有限制:雖然 Springfox Swagger 能夠自動生成 API 文檔,但是文檔生成的細節受到限制,無法自動識別一些細節,例如 API 端點間的依賴關系、數據模型的細節等。這些需要開發者手動進行配置。
  3. API 文檔維護需謹慎:API 文檔的內容需要和代碼一致,如果開發者沒有及時更新 API 文檔,就可能導致文檔和實際代碼不一致,增加維護的難度。
  4. 不支持自定義文檔:盡管 Springfox Swagger 提供了多種自定義主題和樣式的選項,但仍存在一些自定義文檔的需求無法滿足。例如,開發者可能需要根據特定的需求,生成自己定制的 API 文檔,而這是不容易實現的。
  5. 增加應用程序復雜度:在將 Springfox Swagger 集成到應用程序中時,需要增加一些配置和注解,這可能會增加應用程序的復雜度。這也可能會增加代碼的維護成本,特別是在大型項目中。

對于開發者,我們更推薦一體化 API 工具?Apifox:Apifox 是一個接口管理、開發、測試全流程集成工具,可以通過一套系統、一份數據解決多個系統之間的 API 數據同步問題。Apifox 提供的功能包括接口文檔管理、接口調試、數據 Mock、接口測試等,可以幫助團隊提高效率,降低溝通成本。?此外,Apifox 還有許多創新功能,如接口支持用例管理、接口支持分組管理、多人協作編輯等,都可以提高團隊的開發效率。

立即體驗 Apifox

一體化 API 工具 Apifox

同時 Apifox 還提供了基于 IDEA 的插件?Apifox Helper,在 IDEA 寫好代碼后,可以基于插件自動生成 API 文檔,對于很多苦惱于如何從代碼生成規范 API 文檔的開發者來說,開箱即用更易用。

 IDEA 的插件 Apifox Helper

它不僅僅是一個數據打通的工具,還做了很多創新,來提升開發人員的效率。由于其功能全面、工作流邏輯清晰,支持多場景使用,以及對用戶的上心程度,Apifox 受到高效能軟件團隊的喜愛。

好用的 API 開發者工具

與其他接口管理工具相比,Apifox 在產品本身的功能全面性、工作流邏輯清晰性以及多場景使用方面都表現出色。此外,Apifox 對用戶的上心程度也很高,對用戶提出的需求也會關注并且采納。

立即體驗 Apifox

Apifox 在產品本身的功能全面

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

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

相關文章

接口測試基礎 --- 什么是接口測試及其測試流程?

接口測試是軟件測試中的一個重要部分&#xff0c;它主要用于驗證和評估不同軟件組件之間的通信和交互。接口測試的目標是確保不同的系統、模塊或組件能夠相互連接并正常工作。 接口測試流程可以分為以下幾個步驟&#xff1a; 1.需求分析&#xff1a;首先&#xff0c;需要仔細…

kafka-集群縮容

一. 簡述&#xff1a; 當業務增加時&#xff0c;服務瓶頸&#xff0c;我們需要進行擴容。當業務量下降時&#xff0c;為成本考慮。自然也會涉及到縮容。假設集群有 15 臺機器&#xff0c;預計縮到 10 臺機器&#xff0c;那么需要做 5 次縮容操作&#xff0c;每次將一個節點下線…

Spring Boot 概要(官網文檔解讀)

Spring Boot 概述 Spring Boot 是一個高效構建 Spring 生產級應用的腳手架工具&#xff0c;它簡化了基于 Spring 框架的開發過程。 Spring Boot 也是一個“構件組裝門戶”&#xff0c;何為構件組裝門戶呢&#xff1f;所謂的“構件組裝門戶”指的是一個對外提供的Web平臺&#x…

Linux 命令大全完整版(12)

Linux 命令大全 5. 文件管理命令 ln(link) 功能說明&#xff1a;連接文件或目錄。語  法&#xff1a;ln [-bdfinsv][-S <字尾備份字符串>][-V <備份方式>][--help][--version][源文件或目錄][目標文件或目錄] 或 ln [-bdfinsv][-S <字尾備份字符串>][-V…

遺傳算法初探

組成要素 編碼 分為二進制編碼、實數編碼和順序編碼 初始種群的產生 分為隨機方法、基于反向學習優化的種群產生。 基于反向學習優化的種群其思想是先隨機生成一個種群P(N)&#xff0c;然后按照反向學習方法生成新的種群OP(N),合并兩個種群&#xff0c;得到一個新的種群S(N…

【算法】堆

堆 heap&#xff0c;一棵完全二叉樹&#xff0c;使用數組實現的&#xff0c;但具備完全二叉樹的一些性質。一般總是滿足以下性質&#xff1a; 堆中某個節點的值總是不大于或不小于其父節點的值&#xff1b;堆總是一棵完全二叉樹。&#xff08;即除了最底層&#xff0c;其他層…

C/C++高性能Web開發框架全解析:2025技術選型指南

一、工業級框架深度解析&#xff08;附性能實測&#xff09; 1. Drogon v2.1&#xff1a;異步框架性能王者 核心架構&#xff1a; Reactor 非阻塞I/O線程池&#xff08;參考Nginx模型&#xff09; 協程實現&#xff1a;基于Boost.Coroutine2&#xff08;兼容C11&#xff09;…

使用PHP接入純真IP庫:實現IP地址地理位置查詢

引言 在日常開發中,我們經常需要根據用戶的IP地址獲取其地理位置信息,例如國家、省份、城市等。純真IP庫(QQWry)是一個常用的IP地址數據庫,提供了豐富的IP地址與地理位置的映射關系。本文將介紹如何使用PHP接入純真IP庫,并通過一個完整的案例演示如何實現IP地址的地理位…

Django ORM 的常用字段類型、外鍵關聯的跨表引用技巧,以及 `_` 和 `__` 的使用場景

一、Django ORM 常用字段類型 1. 基礎字段類型 字段類型說明示例CharField字符串字段&#xff0c;必須指定 max_lengthname models.CharField(max_length50)IntegerField整數字段age models.IntegerField()BooleanField布爾值字段is_active models.BooleanField()DateFiel…

java遞歸求自然數列的前n項和

概述 實現 /*** 數列 1 2 3 ... n ...* 遞歸求數列的前n項和* param n* return*/private static long calSum(long n){if (n1) return 1;else {return ncalSum(n-1); // 前n項的和 即第n項的值前n-1項的和}}測試用例 public static void main(String[] args) {long res1 cal…

【Golang 面試題】每日 3 題(六十五)

?個人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;專欄地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;專欄簡介&#xff1a;在這個專欄中&#xff0c;我將會分享 Golang 面試中常見的面試題給大家~ ??如果有收獲的話&#xff0c;歡迎點贊&#x1f44d;收藏…

16、Python面試題解析:python中的淺拷貝和深拷貝

在 Python 中&#xff0c;淺拷貝&#xff08;Shallow Copy&#xff09; 和 深拷貝&#xff08;Deep Copy&#xff09; 是處理對象復制的兩種重要機制&#xff0c;它們的區別主要體現在對嵌套對象的處理方式上。以下是詳細解析&#xff1a; 1. 淺拷貝&#xff08;Shallow Copy&a…

【Godot4.3】題目與答案解析合并器

免責申明 本文和工具截圖中涉及題庫和題目&#xff0c;均為本人自學使用&#xff0c;并未有商業和傳播企圖。如有侵害&#xff0c;聯系刪改。 概述 筆者本人醫學專業從業人員&#xff0c;編程只是業余愛好。在自己的專業應考學習過程當中&#xff1a; 有時候不太喜歡紙質題庫…

Lm studio本地部署DeepSeek

為什么用Lm studio Ollama官網下載過慢或失敗&#xff08;Lm默認下載源無法下載&#xff0c;但可以更換下載源&#xff09;Ollama默認安裝至C盤一部分Nivida顯卡無法吃滿顯存資源一部分AMD顯卡替換rocm文件后無法啟動 Lm studio安裝 官網下載&#xff1a;LM Studio - Discov…

基于Qlearning強化學習的2DoF機械臂運動控制系統matlab仿真

目錄 1.算法仿真效果 2.算法涉及理論知識概要 2.1 2DoF機械臂運動學模型 2.2 Q-learning強化學習算法原理 3.MATLAB核心程序 4.完整算法代碼文件獲得 1.算法仿真效果 matlab2022a仿真結果如下&#xff08;完整代碼運行后無水印&#xff09;&#xff1a; 仿真操作步驟可參…

Unity貼圖與模型相關知識

一、貼圖 1.貼圖的類型與形狀 貼圖類型 貼圖形狀 2.在Unity中可使用一張普通貼圖來生成對應的法線貼圖&#xff08;但并不規范&#xff09; 復制一張該貼圖將復制后的貼圖類型改為Normal Map 3.貼圖的sRGB與Alpha sRGB&#xff1a;勾選此選項代表此貼圖存儲于Gamma空間中…

快速上手 Unstructured:安裝、Docker部署及PDF文檔解析示例

1. 核心概念 1.1 Unstructured簡介 Unstructured 是一個強大的 Python 庫,專注于從非結構化數據中提取和預處理文本信息,廣泛應用于 PDF、Word 文檔、HTML 等多種格式的文件處理。其核心功能包括分區、清理、暫存和分塊,能夠將復雜的非結構化文檔轉換為結構化輸出,為后續…

pyecharts介紹

文章目錄 介紹安裝pyecharts基本使用全局配置選項 折線圖相關配置地圖模塊使用柱狀圖使用 介紹 echarts慮是個由百度開源的數據可視化&#xff0c;憑借著良好的交互性&#xff0c;精巧的圖表設計&#xff0c;得到了眾多開發者的認可&#xff0c;而Pyhon是門富有表達力的語言&a…

Fisher信息矩陣與Hessian矩陣:區別與聯系全解析

Fisher信息矩陣與Hessian矩陣&#xff1a;區別與聯系全解析 在統計學和機器學習中&#xff0c;Fisher信息矩陣&#xff08;FIM&#xff09;和Hessian矩陣是兩個經常出現的概念&#xff0c;它們都與“二階信息”有關&#xff0c;常用來描述函數的曲率或參數的敏感性。你可能聽說…

python與C系列語言的差異總結(1)

/ 表示浮點除法 // 表示整數除法 print(8/3)print(8//3)布爾型 False/True 首字母大寫 整數的大小是沒有限制的&#xff0c;會根據需要自動增長&#xff0c;僅受限于可用內存的大小。 m**n表示m的n次方 x 4.3 ** 2.4print(x)print(3.5e30 * 2.77e45)print(1000000001.0 *…