SpringBoot2.7.8整合Swagger3
為了方便編寫接口文檔,最近準備在框架中整合Swagger。
一開始整合了Swagger2,很順利,但是部長說要向前看,整個最新的。。。
好吧,那就Swagger3。
遇到不少問題,有億點折磨。

必要操作
導入依賴
在啟動項上添加注解@EnableOpenApi
配置application(2.6及以上的SpringBoot整合Swagger3都需要配這一項)
這樣就可以通過網(wǎng)址localhost:8080/swagger-ui/index.html訪問Swagger了。
當然,前提是你的項目還沒有整合其他什么亂七八糟的東西。

下面就講一下我遇到的問題。
404
一種可能是WebMvc配置類繼承了WebMvcConfigurationSupport,這會覆蓋默認的靜態(tài)資源映射,導致Swagger的網(wǎng)頁也無法被找到。此時就自己在繼承了WebMvcConfigurationSupport的配置類中配置一下靜態(tài)資源映射。這里把靜態(tài)資源放在了"classpath:/static/"目錄下,大家也可以自己調(diào)整。
也可能是因為配置了攔截器,將Swagger攔截了下來,可以在配置中將Swagger相關請求放行。如果是shiro配置方式略有不同,不會可以度娘,反正不要攔截了就行。當然,因為攔截器的功能不同,也不是一定會對Swagger產(chǎn)生影響的,有需要或者求穩(wěn)就放行一下。
死循環(huán)
該問題指的是出現(xiàn)了以下彈窗,提示Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway.?

直接搜這條提示也可以搜到一些解決方法,例如:
blog.csdn.net/just_now_and_future/article/details/89343680
blog.csdn.net/wjf8882300/article/details/107013993
blog.csdn.net/LeeKitch/article/details/126967804
blog.csdn.net/kikii233/article/details/116761596
反正還挺多的,五花八門,但是我一個個試下來都沒解決。讓人心態(tài)炸裂。
后來我是新建了一個空項目來嘗試整合,結(jié)果根本沒遇到這個問題!
我就對WebMvcConfig中的配置逐一排查了一下,發(fā)現(xiàn)是添加了請求前綴的原因:
我把這段代碼注釋掉后就可以順利打開Swagger頁面了。
PS:感謝評論區(qū)大佬Seasee_Yc?的指點,下面進行一點補充說明

Swagger頁面應該是由上圖的Controller來控制的,用到了@RestController注解,如果按照我的方式來添加請求前綴,對其也會產(chǎn)生影響,所以需要對addResourceHandlers方法進行調(diào)整,調(diào)整后如下:
然后Swagger的訪問地址也要調(diào)整為localhost:8080/api/v1/swagger-ui/index.html
如果不希望給Swagger添加請求前綴怎么辦呢?很簡單,將configurePathMatch方法中的RestController用自定義注解替換即可。具體的替換步驟可以參考:www.jianshu.com/p/dde81efadb09
我覺得吧,替換了也好,避免以后再出現(xiàn)這樣的問題。。。

可選操作
Swagger也可以自定義一些內(nèi)容,就是編寫Swagger的配置類,網(wǎng)上很多,不細嗦了。
