swagger 提示 'Unable to find specification for group default'
問題
今天除錯介面時,發現swagger無法加載出來資料,因為用的是 knife4j 進行的整合,表現為請求資料介面 404 :
後臺日誌報警告資訊 Unable to find specification for group default
但是其他模組正常
解決
找直接根源
既然有告警資訊,那就好辦了,我們先在idea中全域性搜尋這個報錯資訊,發現這個報錯資訊來自 springfox.documentation.swagger2.web.Swagger2ControllerWebMvc
這個類,
從名稱面來看,應該是一個介面類,然後找到了對應的方法 getDocumentation()
我們debug看下:
可以看到獲取到的值為 null
,而 DocumentationCache
這個物件呢,網上搜索到的資訊顯示,這個物件中,儲存的是文件資訊的快取,所以很明顯,這裡沒有找到任何資料
分析 DocumentationCache
既然 DocumentationCache 正常情況下,應該是有資料的,那我們就看看,什麼時候這個物件會被載入資料,又在網上搜索了下,發現是由 DocumentationPluginsBootstrapper
這個類進行載入的
由文件載入器DocumentationPluginsBootstrapper進行載入,類實現了SmartLifecycle介面,當spring載入完bean後,呼叫start()方法進行載入。
而start()方法,又呼叫了父類的 bootstrapDocumentationPlugins() 方法
看下這個方法做了什麼事情
從程式碼可以看到會呼叫到另外的方法 scanDocumentation()
此時,我們在這個地方打點斷,然後重新啟動,跟著斷點一步一步的往下走
到這個地方的時候,我們發現,捕獲到了一個異常
開啟異常資訊,可以看到這句話:
結果
看到這句話,我恍然大悟,是剛剛寫的介面用的註解出錯了
關鍵就在於 @RequestParam 這個註解
點進去看原始碼,我們可以看到這個註解的 value 與 name 屬性,是互為別名的,而我寫的時候寫錯了,勿把 name 屬性當成註釋用了
實際如果我想在 swagger 文件中給引數加個說明的話,我應該使用 @ApiParam 註解
參考資料: