swagger 提示 'Unable to find specification for group default'


問題

今天調試接口時,發現swagger無法加載出來數據,因為用的是 knife4j 進行的集成,表現為請求數據接口 404 :

image

后台日志報警告信息 Unable to find specification for group default

但是其他模塊正常

解決

找直接根源

既然有告警信息,那就好辦了,我們先在idea中全局搜索這個報錯信息,發現這個報錯信息來自 springfox.documentation.swagger2.web.Swagger2ControllerWebMvc 這個類,

從名稱面來看,應該是一個接口類,然后找到了對應的方法 getDocumentation()

image

我們debug看下:

image

可以看到獲取到的值為 null,而 DocumentationCache 這個對象呢,網上搜索到的信息顯示,這個對象中,保存的是文檔信息的緩存,所以很明顯,這里沒有找到任何數據

分析 DocumentationCache

既然 DocumentationCache 正常情況下,應該是有數據的,那我們就看看,什么時候這個對象會被加載數據,又在網上搜索了下,發現是由 DocumentationPluginsBootstrapper 這個類進行加載的

由文檔加載器DocumentationPluginsBootstrapper進行加載,類實現了SmartLifecycle接口,當spring加載完bean后,調用start()方法進行加載。

image

而start()方法,又調用了父類的 bootstrapDocumentationPlugins() 方法

看下這個方法做了什么事情

image

從代碼可以看到會調用到另外的方法 scanDocumentation()

此時,我們在這個地方打點斷,然后重新啟動,跟着斷點一步一步的往下走

image

到這個地方的時候,我們發現,捕獲到了一個異常

打開異常信息,可以看到這句話:

image

結果

看到這句話,我恍然大悟,是剛剛寫的接口用的注解出錯了

image

關鍵就在於 @RequestParam 這個注解

image

點進去看源碼,我們可以看到這個注解的 value 與 name 屬性,是互為別名的,而我寫的時候寫錯了,勿把 name 屬性當成注釋用了

實際如果我想在 swagger 文檔中給參數加個說明的話,我應該使用 @ApiParam 注解

參考資料:

https://blog.csdn.net/lvzhyt/article/details/117027177


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM