【Spring Boot】構建RESTful服務 — 使用Swagger生成Web API文檔

使用Swagger生成Web API文檔

高質量的API文檔在系統開發的過程中非常重要。本節介紹什么是Swagger,如何在Spring Boot項目中集成Swagger構建RESTful API文檔,以及為Swagger配置Token等通用參數。

1.什么是Swagger

Swagger是一個規范和完整的框架,用于生成、描述、調用和可視化RESTful風格的Web服務,是非常流行的API表達工具。

普通的API文檔存在以下問題:

1)由于接口眾多,并且細節復雜(需要考慮不同的HTTP請求類型、HTTP頭部信息、HTTP請求內容等),創建這樣一份高質量的文檔是一件非常煩瑣的工作。

2)隨著需求的不斷變化,接口文檔必須同步修改,就很容易出現文檔和業務不一致的情況。為了解決這些問題,Swagger應運而生,它能夠自動生成完善的RESTful API文檔,并根據后臺代碼的修改同步更新。這樣既可以減少維護接口文檔的工作量,又能將說明內容集成到實現代碼中,讓維護文檔和修改代碼合為一體,實現代碼邏輯與說明文檔的同步更新。另外,Swagger也提供了完整的測試頁面來調試API,讓API測試變得輕松、簡單。

2.使用Swagger生成Web API文檔

在Spring Boot項目中集成Swagger同樣非常簡單,只需在項目中引入springfox-swagger2和springfox-swagger-ui依賴即可。下面就以之前的用戶管理模塊接口為例來感受Swagger的魅力。

步驟01 配置Swagger的依賴。

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

在上面的示例中,在項目pom.xml配置文件中引入了springfox-swagger2和springfox-swagger-ui兩個依賴包。其中swagger2是主要的文檔生成組件,swagger-ui為頁面顯示組件。

步驟02 創建Swagger2配置類。

@Configuration
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {@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("Spring boot中使用Swagger2構建RESTful APIs").description("相關文章請關注:https://blog.csdn.net/weixin_45627039?spm=1000.2115.3001.5343").termsOfServiceUrl("https://blog.csdn.net/weixin_45627039?spm=1000.2115.3001.5343")// .contact("架構師精進").version("1.0").build();}/*** swagger增加url映射* @param registry*/@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars");}
}

在上面的示例中,我們在SwaggerConfig的類上添加了@Configuration和@EnableSwagger2兩個注解。

@Configuration注解讓Spring Boot來加載該類配置。

@EnableSwagger2注解啟用Swagger2,通過配置一個Docket Bean,來配置映射路徑和要掃描的接口所在的位置。

apiInfo主要配置Swagger2文檔網站的信息,比如網站的標題、網站的描述、使用的協議等。

需要注意的是:

1)basePackage可以在SwaggerConfig中配置com.weiz.example01.controller,也可以在啟動器ComponentScan中配置。

2)需要在SwaggerConfig中配置Swagger的URL映射地址:/swagger-ui.html。

步驟03 添加文檔說明內容。

上面的配置完成之后,接下來需要在API上增加內容說明。我們直接在之前的用戶管理模塊的UserController中增加相應的接口內容說明,代碼如下:

    @Api(tags = {"用戶接口"})@RestControllerpublic class UserController {@ApiOperation(value="創建用戶", notes="根據User對象創建用戶")@PostMapping(value ="user")public JSONResult save(@RequestBody User user){System.out.println("用戶創建成功:" + user.getName());return JSONResult.ok(201, "用戶創建成功");}@ApiOperation(value="更新用戶詳細信息", notes="根據id來指定更新對象,并根據傳過來的user信息來更新用戶詳細信息")@PutMapping(value = "user")public JSONResult update(@RequestBody User user) {System.out.println("用戶修改成功:" + user.getName());return JSONResult.ok(203, "用戶修改成功");}@ApiOperation(value="刪除用戶", notes="根據url的id來指定刪除對象")@ApiImplicitParam(name = "userId", value = "用戶ID", required = true, dataType ="Long", paramType = "query")@DeleteMapping("user/{userId}")public JSONResult delete(@PathVariable String userId) {System.out.println("用戶刪除成功:" + userId);return JSONResult.ok(204,"用戶刪除成功");}}

在上面的示例中,主要為UserController中的接口增加了接口信息描述,包括接口的用途、請求參數說明等。

1)@Api注解:用來給整個控制器(Controller)增加說明。

2)@ApiOperation注解:用來給各個API方法增加說明。

3)@ApiImplicitParams、@ApiImplicitParam注解:用來給參數增加說明。

步驟04 查看生成的API文檔。

完成上面的配置和代碼修改之后,Swagger 2就集成到Spring Boot項目中了。接下來啟動項目,在瀏覽器中訪問http://localhost:8080/swagger-ui.html,Swagger會自動構建接口說明文檔,如圖所示。

在這里插入圖片描述
Swagger自動將用戶管理模塊的全部接口信息展現出來,包括接口功能說明、調用方式、請求參數、返回數據結構等信息。

在Swagger頁面上,我們發現每個接口描述右側都有一個按鈕try it out,單擊try it out按鈕即可調用該接口進行測試。如圖所示,在獲取人員信息的接口上單擊try it out按鈕,輸入userId的請求參數“2001”,單擊Execute按鈕就會將請求發送到后臺,從而進行接口驗證測試。

在這里插入圖片描述

3.為Swagger添加token參數

很多時候,客戶端在調用API時需要在HTTP的請求頭攜帶通用參數,比如權限驗證的token參數等。但是Swagger是怎么描述此類參數的呢?接下來通過示例演示如何為Swagger添加固定的請求參數。

其實非常簡單,修改Swagger2Config配置類,利用ParameterBuilder構成請求參數。具體示例代碼如下:

@Configuration
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {@Beanpublic Docket createRestApi() {ParameterBuilder parameterBuilder = new ParameterBuilder();List<Parameter> parameters = new ArrayList<Parameter>();parameterBuilder.name("token").description("token令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build();return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")).paths(PathSelectors.any()).build().globalOperationParameters(parameters);}...
}

在上面的示例中,通過ParameterBuilder類把token作為全局統一的參數添加到HTTP的請求頭中。系統所有的API都會統一加上此參數。

完成之后重新啟動應用,再次查看接口,如圖所示,我們可以看到接口參數中已經支持發送token請求參數。

在這里插入圖片描述
人員管理模塊中的所有API都統一加上了token參數,調用時Swagger會將token參數自動加入HTTP的請求頭。

4.Swagger常用注解

Swagger提供了一系列注解來描述接口信息,包括接口說明、請求方法、請求參數、返回信息等,常用注解如表所示。

在這里插入圖片描述
在實際項目中,Swagger除了提供@ApiImplicitParams注解描述簡單的參數之外,還提供了用于對象參數的@ApiModel和@ApiModelProperty兩個注解,用于封裝的對象作為傳入參數或返回數據。

@ApiModel負責描述對象的信息

@ApiModelProperty負責描述對象中屬性的相關內容

以上是在項目中常用的一些注解,利用這些注解就可以構建出清晰的API文檔。

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

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

相關文章

QT創建項目

可選擇CMake或qmake

SSL證書DV和OV的區別?

SSL證書是在互聯網通信中保護數據傳輸安全的一種加密工具。它能夠確保客戶端和服務器之間的通信得以加密&#xff0c;防止第三方竊聽或篡改信息。在選擇SSL證書時&#xff0c;常見的有DV證書和OV證書&#xff0c;它們在驗證標準和信任級別上有所不同。那么SSL證書DV和OV的有哪些…

二叉搜索樹K和KV結構模擬

一 什么是二叉搜索樹 這個的結構特性非常重要&#xff0c;是后面函數實現的結構基礎&#xff0c;二叉搜索樹的特性是每個根節點都比自己的左樹任一節點大&#xff0c;比自己的右樹任一節點小。 例如這個圖&#xff0c; 41是根節點&#xff0c;要比左樹大&#xff0c;比右樹小&…

Neo4j之DELETE基礎

在 Neo4j 中&#xff0c;DELETE 語句用于刪除節點、關系或節點屬性。它允許從圖數據庫中移除不再需要的數據。 1】刪除節點及其關系&#xff1a; MATCH (p:Person {name: Alice}) DETACH DELETE p;這個查詢會找到具有 "Person" 標簽且屬性 "name" 為 &qu…

人工智能原理概述 - ChatGPT 背后的故事

大家好&#xff0c;我是比特桃。如果說 2023 年最火的事情是什么&#xff0c;毫無疑問就是由 ChatGPT 所引領的AI浪潮。今年無論是平日的各種媒體、工作中接觸到的項目還是生活中大家討論的熱點&#xff0c;都離不開AI。其實對于互聯網行業來說&#xff0c;自從深度學習出來后就…

進入現代云技術的世界-APIGateway、ServiceMesh、OpenStack、異步化框架、云原生框架、命令式API與聲明式API

目錄 APIGateway Service Mesh OpenStack 異步化框架 云原生框架 命令式API與聲明式API APIGateway API網關&#xff08;API Gateway&#xff09;是一個服務器——充當了客戶端和內部服務之間的中間層。API網關負責處理API請求&#xff0c;將客戶端的請求路由到相應的后端…

StringJoiner

1、為什么要學習StringJoiner&#xff1f; 2、StringJoiner概述 StringJoiner跟StringBuilder一樣&#xff0c;也可以看成一個容器&#xff0c;創建之后里面的內容是可變的。 2.1、作用 提高字符串的操作效率&#xff0c;而且代碼編寫特別簡潔&#xff0c;但是目前市場上很少有…

銀行家算法

1.設計目的與要求 1.1設計目的 了解銀行家算法中使用的數據結構和求安全序列算法&#xff0c;并進一步加深對避免死鎖算法及其實現過程的理解。 1.2設計要求 通過編寫和調試一個系統動態分配資源的簡單模擬程序&#xff0c;觀察死鎖產生的條件&#xff0c;并采用適當的算法&a…

2023.8.7論文閱讀

文章目錄 CMUNeXt: An Efficient Medical Image Segmentation Network based on Large Kernel and Skip Fusion摘要本文方法實驗結果 Boundary Difference Over Union Loss For Medical Image Segmentation&#xff08;損失函數&#xff09;摘要本文方法實驗結果 CMUNeXt: An E…

回歸預測 | MATLAB實現基于PSO-LSSVM-Adaboost粒子群算法優化最小二乘支持向量機結合AdaBoost多輸入單輸出回歸預測

回歸預測 | MATLAB實現基于PSO-LSSVM-Adaboost粒子群算法優化最小二乘支持向量機結合AdaBoost多輸入單輸出回歸預測 目錄 回歸預測 | MATLAB實現基于PSO-LSSVM-Adaboost粒子群算法優化最小二乘支持向量機結合AdaBoost多輸入單輸出回歸預測預測效果基本介紹模型描述程序設計參考…

【基礎操作】Linux打開terminal,Anaconda默認進入的虛擬環境(python版本)設置(自行指定)

為了免除每次打開terminal都要輸入 conda activate … 的麻煩&#xff0c;可以這么設置。 1. 打開terminal&#xff0c;然后輸入命令 vim ~/.bashrc2. 然后在文件末尾添加 conda activate your_envs # your_envs是你的虛擬環境名稱3. 保存退出&#xff0c;重新打開就成功啦…

navicat連接postgresql報錯

navicat連接postgresql報錯 navicat連接postgresql報錯 現象 有小伙伴告訴我 安裝了新的postgresql 使用navicat連接&#xff0c;報錯 ERROR: column "datlastsysoid" does not existLINE 1: SELECT DISTINCT datlastsysoid FROM pg database column “datlastsy…

Go 語言類型轉換的陷阱

1 介紹 Go 語言作為強類型語言&#xff0c;在使用 Golang 開發項目時&#xff0c;經常會遇到類型轉換的場景&#xff0c;整型之間可以直接轉換&#xff0c;字節切片和字符串之間也可以直接轉換。 但是&#xff0c;如果整型和字符串之間做類型轉換&#xff0c;則需要使用 str…

.netcore grpc客戶端流方法詳解

一、客戶端流式處理概述 客戶端流式處理方法在該方法沒有接收消息的情況下啟動。 requestStream 參數用于從客戶端讀取消息。 返回響應消息時&#xff0c;客戶端流式處理調用完成。客戶端可以發送多個消息流到服務端&#xff0c;當所有客戶端消息流發送結束&#xff0c;調用請…

SpringBoot案例-部門管理-修改

目錄 前言 查看頁面原型&#xff0c;明確需求 頁面原型 需求 閱讀接口文件 思路分析 功能接口開發 控制層&#xff08;Controller類&#xff09; 業務層&#xff08;Service類&#xff09; 業務類 業務實現類 持久層&#xff08;Mapper類&#xff09; 接口測試 前…

Day 41

Day 41 343. 整數拆分 一個是j * dp[i - j]&#xff0c;相當于是拆分(i - j)&#xff0c;對這個拆分不理解的話&#xff0c;可以回想dp數組的定義。 dp[i] max({dp[i], (i - j) * j, dp[i - j] * j}); class Solution:def integerBreak(self, n: int) -> int:dp [0] *…

離線環境conda虛擬環境備份遷移--conda pack問題

1.第一步&#xff1a;創建虛擬環境 conda create -n pyenv --clone base 或者 conda create -n pyenv python3.8.5 --offline 命令執行結束&#xff0c;在路徑/xxxx/anaconda/envs 下看到pyenv 或者 conda info --envs 查看羅列虛擬環境 2.第二步&#xff1a;打包環境 conda …

ROS2 學習(一)介紹,環境搭建,以及個人安裝的一些建議

ROS2 學習 學習自b站課程&#xff1a;https://www.bilibili.com/video/BV16B4y1Q7jQ?p1 &#xff08;up主&#xff1a;古月居GYH&#xff09; ROS 介紹 Robot OS&#xff0c;為機器人開發提供了相對完善的 middleware&#xff0c;工具&#xff0c;軟件等。 ROS1 對嵌入式設…

計算機網絡(7) --- UDP協議和TCP協議

計算機網絡&#xff08;6&#xff09; --- https協議_哈里沃克的博客-CSDN博客https協議https://blog.csdn.net/m0_63488627/article/details/132112683?spm1001.2014.3001.5501 目錄 1.補充知識 1.PORT端口號 2.端口號范圍劃分 3.知名端口號 2.UDP協議 1.UDP報頭 2.U…

容器逃逸Docker cp(CVE-2019-14271)漏洞復現與分析

目錄 安裝 原理 EXP 參考 安裝 metarget安裝有點問題&#xff0c;所以我們直接指定安裝 可以用下面命令 查看包 apt-cache madison docker-ce 安裝 apt-get install -y docker-ce5:19.03.0~3-0~ubuntu-bionic 原理 EXP metarget/writeups_cnv/docker-cve-2019-14271 at …