首頁體育 > 正文

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

2021-10-08由 社會實用小妙招 發表于 體育

前言

上一篇文章介紹了前後端分離框架,

如何設計一個簡單易行的API文件

,今天我們就介紹一下

如何在SpringBoot2.x專案中應用此Swagger2框架

,在使用過程中我們需要注意哪些方面。

開始專案

首先,我們需要一個帶有一些Rest Controller的Spring Boot應用程式,我使用了SpringFox 2。9。2和Spring Boot 2。1。12。RELEASE。

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

新增Swagger2依賴

在pom。xml中加入Swagger2的依賴

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

建立Swagger2配置類

在專案的配置包下面建立Swagger2的配置類Swagger2Config

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

配置資訊如下

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

如上程式碼所示,透過

@Configuration註解,讓Spring來載入該類配置

@ EnableSwagger2支援Swagger 2的SpringFox支援。

DocumentationType。SWAGGER_2告訴Docketbean我們正在使用Swagger規範的版本2。

apiInfo()用來建立該Api的基本資訊(這些基本資訊會展現在文件頁面中)。

select()建立一個構建器,用於定義哪些控制器及其生成的文件中應包含哪些方法。

apis()定義要包含的類(控制器和模型類)。這裡我們包括所有這些,但您可以透過基礎包,類註釋等來限制它們。

SpringFox會將其檢測為文件生成源。Controller和Model類。您可以在Docket配置中輕鬆配置它。我們可以使用。apis(RequestHandlerSelectors。any()來包含所有類;當然我們也可以縮小到我們的基礎包

paths()允許您根據路徑對映定義應包含哪個控制器的方法。我們現在包括所有這些,但您可以使用正則表示式等限制它。上面的程式碼。paths(PathSelectors。any())是代表匹配所有URL。

有時我們還需要

只包含特定的URL路徑

。可能正在使用API的多個版本以實現向後相容,但不希望包含歷史版本。也許API的某些部分是內部的,不應該是公共文件的一部分。無論哪種方式,也可以在Docket中配置基於URL匹配的這種包含。如

將其限制為某些正則表示式或Ant樣式的路徑模式,而不是匹配所有路徑的任何路徑。

將Swagger Core註釋新增到模型類中

我們可以在實體類上面進行註釋

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

類級別使用@ApiModel註釋

欄位級別@ApiModelProperty

@ApiModelProperty的示例對於提供示例值非常有用

,這不僅適用於使用者的指導,而且還可以在使用Swagger UI作為REST客戶端來測試服務時預填充請求有效負載。

Position屬性很方便指定屬性在文件中顯示的順序

。首先提供重要或必需的屬性或屬於一起的組屬性是有用的。否則,屬性將按字母順序列出。

將Swagger Core註釋新增到控制器類

與使用Swagger核心註釋註釋模型類以提供其他元資料相同,您可以註釋控制器及其方法和方法引數。

@Api描述了整個控制器

@ApiOperation用於方法級別的描述

@ApiParam用於方法引數

@ApiImplicitParams、@ApiImplicitParam註解來給引數增加說明

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

配置到這裡,基本的配置就結束了。那是不是就可以執行啟動。

404坑一

我們在啟動後,請求http://localhost:8081/swagger-ui。html 直接

報404錯誤

;這個問題是因為我們的專案是純的restful前後端分離的專案,我們在application。yml中配置了。

將其註釋掉熟悉的介面又回來了,這個配置是不自動給靜態資源新增路徑,導致swagger-ui。html找不到資源。怎麼解決呢?修改一下Swagger2Config

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

上面的程式碼就是人為的把資源做一下對映關係。

原始碼Bug坑二

細心的小夥伴在執行時,應用控制檯列印時,會時不時的報異常,如下:

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

我們找到Swagger包下丟擲異常的類:

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

這個異常就是因為上面原始碼上面的判斷條件有問題,如果example屬性不配置的話,在屬性是Integer型別時Long。valueOf(example)時就會報異常,解決方法:

io。springfox:springfox-swagger2:2。9。2中依賴了

swagger-models的1.5.20版本

,我們可以

排除springfox-swagger2中的swagger-models依賴

,匯入

io.swagger:swagger-models的1.5.21版本

即可

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

靜態資源404坑三

到現在為止,如果應用是一個純粹的 REST Api 介面服務,那就基本沒什麼問題,但如果應用中仍然有檢視模板、靜態資源時,可能就會出現載入不到靜態資源了。如果出現這個問題,那隻要在Swagger配置類 SwaggerConfig 中加上靜態資源路徑對映即可:

下面介紹企業專案中比較實用的用法

忽略不想生成文件的介面

某些Controller 不需要生成API文件的介面,可以透過@ApiIgnore忽略掉

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

生產環境關閉Swagger

swagger用來在開發階段方便前後端開發。降低交流成本。但是版本上線之後,需要把swagger關閉。

在配置類Swagger2Config中加上條件註解

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

透過@ConditionalOnProperty(prefix = “swagger2”,value = {“enable”},havingValue = “true”)註解實現。

讀取配置檔案中字首為swagger2的配置,屬性名為enable,值為true。

當條件成立,此配置類被啟用。

兩個屬性name以及havingValue,其中name用來從application。properties中讀取某個屬性值,

如果該值為空,則返回false;

如果值不為空,

則將該值與havingValue指定的值進行比較

,如果一樣則返回true;否則返回false。如果返回值為false,

則該configuration不生效;為true則生效

配置全域性引數

在做前後端分離的專案中,每個介面中都會有相同的引數,如:token,使用者令牌;那怎麼方便的在Swagger中使用呢?我們在Swagger2Config配置類中

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

上面程式碼就達到了在每個介面上面加上了token引數,token是非必填的

總結

今天老顧介紹了swagger的一些實戰,當然介紹了不是太完整,有些網上會有所介紹,老顧只是把一些重點,在這裡闡述了。謝謝!!!

Spring Boot 2.x使用Swagger2構建API文件及跳坑(二)

頂部