天天看點

SpringBoot16:內建Swagger終極版

SpringBoot16:內建Swagger終極版

學習目标:

了解Swagger的概念及作用

掌握在項目中內建Swagger自動生成API文檔

前後端分離

前端 -> 前端控制層、視圖層

後端 -> 後端控制層、服務層、資料通路層

前後端通過API進行互動

前後端相對獨立且松耦合

産生的問題

前後端內建,前端或者後端無法做到“及時協商,盡早解決”,最終導緻問題集中爆發

解決方案

首先定義schema [ 計劃的提綱 ],并實時跟蹤最新的API,降低內建風險

Swagger

号稱世界上最流行的API架構

Restful Api 文檔線上自動生成器 => API 文檔 與API 定義同步更新

直接運作,線上測試API

支援多種語言 (如:Java,PHP等)

官網:https://swagger.io/

SpringBoot內建Swagger => springfox,兩個jar包

Springfox-swagger2

springfox-swagger-ui

使用Swagger

要求:jdk 1.8 + 否則swagger2無法運作;springboot版本2.1.7.RELEASE

步驟:

1、建立一個SpringBoot-web項目

2、添加Maven依賴

3、編寫HelloController,測試確定運作成功!

4、要使用Swagger,我們需要編寫一個配置類-SwaggerConfig來配置 Swagger

5、通路測試 :http://localhost:8080/swagger-ui.html ,可以看到swagger的界面;

SpringBoot16:內建Swagger終極版

1、Swagger執行個體Bean是Docket,是以通過配置Docket執行個體來配置Swaggger。

2、可以通過apiInfo()屬性配置文檔資訊

3、Docket 執行個體關聯上 apiInfo()

4、重新開機項目,通路測試 http://localhost:8080/swagger-ui.html 看下效果;

SpringBoot16:內建Swagger終極版

1、建構Docket時通過select()方法配置怎麼掃描接口。

2、重新開機項目測試,由于我們配置根據包的路徑掃描接口,是以我們隻能看到一個類

3、除了通過包路徑配置掃描接口外,還可以通過配置其他方式掃描接口,這裡注釋一下所有的配置方式:

4、除此之外,我們還可以配置接口掃描過濾:

5、這裡的可選值還有

1、通過enable()方法配置是否啟用swagger,如果是false,swagger将不能在浏覽器中通路了

2、如何動态配置當項目處于test、dev環境時顯示swagger,處于prod時不顯示?

3、配置檔案 <code>application.properties</code>

配置檔案``application-dev.properties`

配置檔案<code>application-pro.properties</code>

4、通路<code>http://localhost:8081/swagger-ui.html</code>測試一下,可正常通路,将 <code>application.properties</code> 檔案改成

<code>spring.profiles.active=pro</code>,通路<code>http://localhost:8082/swagger-ui.html</code>測試一下,效果如下圖:

SpringBoot16:內建Swagger終極版
SpringBoot16:內建Swagger終極版

1、如果沒有配置分組,預設是default。通過groupName()方法即可配置分組:

2、重新開機項目檢視分組

3、如何配置多個分組?配置多個分組隻需要配置多個docket即可:

4、重新開機項目檢視即可

1、建立一個實體類

2、隻要這個實體在請求接口的傳回值上(即使是泛型),都能映射到實體項中:

3、重新開機檢視測試

SpringBoot16:內建Swagger終極版

注:并不是因為@ApiModel這個注解讓實體顯示在這裡了,而是隻要出現在接口方法的傳回值上的實體都會顯示在這裡,而@ApiModel和@ApiModelProperty這兩個注解隻是為實體添加注釋的。

@ApiModel為類添加注釋

@ApiModelProperty為類屬性添加注釋

Swagger的所有注解定義在io.swagger.annotations包下

下面列一些經常用到的,未列舉出來的可以另行查閱說明:

Swagger注解

簡單說明

@Api(tags = "xxx子產品說明")

作用在子產品類上

@ApiOperation("xxx接口說明")

作用在接口方法上

@ApiModel("xxxPOJO說明")

作用在模型類上:如VO、BO

@ApiModelProperty(value = "xxx屬性說明",hidden = true)

作用在類方法和屬性上,hidden設定為true可以隐藏該屬性

@ApiParam("xxx參數說明")

作用在參數、方法和字段上,類似@ApiModelProperty

我們也可以給請求的接口配置一些注釋

這樣的話,可以給一些比較難了解的屬性或者接口,增加一些配置資訊,讓人更容易閱讀!

相較于傳統的Postman或Curl方式測試接口,使用swagger簡直就是傻瓜式操作,不需要額外說明文檔(寫得好本身就是文檔)而且更不容易出錯,隻需要錄入資料然後點選Execute,如果再配合自動化架構,可以說基本就不需要人為操作了。

Swagger是個優秀的工具,現在國内已經有很多的中小型網際網路公司都在使用它,相較于傳統的要先出Word接口文檔再測試的方式,顯然這樣也更符合現在的快速疊代開發行情。當然了,提醒下大家在正式環境要記得關閉Swagger,一來出于安全考慮二來也可以節省運作時記憶體。

我們可以導入不同的包實作不同的皮膚定義:

1、預設的 通路 http://localhost:8080/swagger-ui.html

SpringBoot16:內建Swagger終極版

2、bootstrap-ui 通路 http://localhost:8080/doc.html

SpringBoot16:內建Swagger終極版

3、mg-ui 通路 http://localhost:8080/document.html

SpringBoot16:內建Swagger終極版

4、Layui-ui 通路 http://localhost:8080/docs.html

SpringBoot16:內建Swagger終極版

注意:Layui-ui 不能分組,否則打不開頁面