swagger 實現版本的動態配置

2021-09-28 20:39:18 字數 2918 閱讀 9090

先上效果圖:

不同版本的介面在不同的swagger版本分組中,我們通過在請求介面上新增自定義註解來對請求介面的版本分組;然後在構建 docket 時,基於註解的值執行不同的處理邏輯,參考下面**的builddocketwithgroupname方法。

之前的版本配置是通過如下的**的:

@configuration

@enableswagger2

@enablewebmvc

public

class

swaggerconfig

@bean

public docket vinfo210()

@bean

public docket vinfo220()

@bean

public docket vinfo230()

@bean

public docket v100()

@bean

public docket v201()

private apiinfo buildapiinf()

private docket builddocketwithgroupname

(string groupname)}if

(apiversion.

value()

!= null && apiversion.

value()

.length !=0)

}}apiversion clzzapiversion = input.

gethandlermethod()

.getbeantype()

.getannotation

(apiversion.

class);

if(clzzapiversion != null)}if

(clzzapiversion.

value()

!= null && clzzapiversion.

value()

.length !=0)

}}return

false;}

)//controller路徑

.paths

(pathselectors.

any())

.build();}}

可以看出每在apiversionconstant中增加乙個版本(即乙個常量值),我們需要在 spring 中註冊乙個對應的docket;這也太不方便了,既然 spring 的 bean 可以在程式設計時動態注入,那麼就能解決這個問題了。修改**如下:

@configuration

@enableswagger2

@enablewebmvc

public

class

swaggerconfig

implements

initializingbean

private apiinfo buildapiinf()

private docket builddocketwithgroupname

(string groupname)}if

(apiversion.

value()

!= null && apiversion.

value()

.length !=0)

}}apiversion clzzapiversion = input.

gethandlermethod()

.getbeantype()

.getannotation

(apiversion.

class);

if(clzzapiversion != null)}if

(clzzapiversion.

value()

!= null && clzzapiversion.

value()

.length !=0)

}}return

false;}

)//controller路徑

.paths

(pathselectors.

any())

.build()

;}@override

public

void

afterpropertiesset()

throws exception }}

}

值得一提的是,我們這裡通過註解來識別對應介面所屬版本,具體實現參考方法:builddocketwithgroupname。註解可以在 controller 上,也可以在它的方法上,方法上的優先順序大於 controller上的版本註解優先順序。註解在 controller 上預設當前類下的所有方法都屬於這一版本。

下面是註解類的**:

@retention

(retentionpolicy.runtime)

@target()

public @inte***ce

apiversion

;/**

* 介面版本號(對應swagger中的value)

** @return string

*/string[

]value()

default

;}

這裡還有個優化可以做掉,那就是 apiinfo 應該針對不同版本使用不同的值,也就是 buildapiinf 方法。

認認真真學習,做思想的產出者,而不是文字的搬運工。錯誤之處,還望指出!

小公尺8配哪個版本的MIUI?

小公尺8之前我是忠實的魅粉,魅族手機用過m8,mx3,note5,mx6 pro。魅族真的是被聯發科的cpu坑了,一核有難,八核圍觀。入手小公尺8,miui是9,一路跟著系統自動更新,更新到了12。更新12後,手機太卡了,發燙,耗電,有換手機的衝動。後來把手機解鎖了,刷回miui9.5,太流暢了,像...

Spring Quartz實現定時任務的配置方法

1 scheduler的配置 說明 scheduler包含乙個trigger列表,每個trigger表示乙個作業。2 trigger和jobdetail的配置 0 0 0 1 說明 1 cron表示式的格式 秒 分 時 日 月 周 年 可選 欄位名 允許的值 允許的特殊字元 秒 0 59 分 0 5...

spring boot 動態資料來源最簡化的配置!

前言 demo的包結構 一 專案配置相關。1.1 pom.xml 省略,spring boot 版本1.4.3 資料來源配置一 兼預設資料來源 spring.datasource.test1.url jdbc mysql localhost 3306 test1?useunicode true ch...