這幾天換了新的設備用於開發。啓動項目後訪問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並不需要該配置。

相關文章