Spring Boot Swagger-UI 404
這幾天換了新的設備用於開發。啓動項目後訪問swagger地址,發現空空如也。本篇文章就來記錄下Spring Boot Swagger-UI 404的可能原因及解決方案。
先決條件
若要順利閱讀本篇文章, 需要你具備如下條件:
- 掌握Java開發
- 掌握SpringBoot框架
- 掌握Swagger框架及相應配置
阿航的項目環境:
環境 | 版本 |
---|---|
JDK | 14 |
SpringBoot | 2.1.13.RELEASE |
Swagger | 2.9.2 |
一定要注意環境的差異, 考慮不兼容的可能性; 並且具備以上條件. 否則閱讀本篇博客可能會給你帶來困擾.
問題原因
在網上翻了個遍,衆說紛紜。記錄下我找到的情況以及對應的解決方案。
情況一:檢查Swagger是否限制環境
很明顯我們在生產環境不太希望將完整的接口文檔暴露出來,我們通常會通過 @Profile
進行限制,比如:
@EnableSwagger2 @Configuration @Profile("dev") class SwaggerConfig { ...
上面的 @Profile
的值就是限制了我們僅在哪些環境中展示Swagger。
所以,
檢查你的環境是否在 @Profile
內部。
情況二:綁定靜態資源文件
在你的Swagger配置文件中(或任何注入Bean的類中)添加:
@Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { // 解決靜態資源無法訪問 registry.addResourceHandler("/**") .addResourceLocations("classpath:/static/"); // 解決swagger無法訪問 registry.addResourceHandler("/swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); // 解決swagger的js文件無法訪問 registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); }
此方法存在爭議,因爲新版本的SpringBoot和Swagger並不需要該配置。