解決SpringBoot2.0集成Swagger2訪問404的問題


最近使用最新的SpringBoot2.0集成Swagger2的時候遇到一個問題,集成之后打開Swagger頁面的時候出現404,后台提示找不到swagger-ui的頁面。於是我看了下項目依賴swagger的結構:
在這里插入圖片描述
可以看到 swagger-ui.html 在META-INF/resources目錄下,所以我們需要手動的將靜態資源路徑指向這里,在java中配置為:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**

  • @author xiaqing
    */
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig extends WebMvcConfigurationSupport {

    @Bean
    public Docket createRestApi() {
    return new Docket(DocumentationType.SWAGGER_2)
    .apiInfo(apiInfo())
    .select()
    .apis(RequestHandlerSelectors.basePackage("com.xqnode.controller"))
    .paths(PathSelectors.any())
    .build();
    }

    private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
    .title("接口總覽")
    .description("測試")
    .version("1.0")
    .build();
    }

    /**

    • 防止@EnableMvc把默認的靜態資源路徑覆蓋了,手動設置的方式
    • @param registry
      */
      @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/");

    }
    }

在swagger的配置類中繼承WebMvcConfigurationSupport,實現addResourceHandlers方法,設置靜態資源可訪問。

設置完成后重啟項目,就可以通過 http://localhost:8080/swagger-ui.html 正常訪問了。


===== 2019.03.13更新 =====
有的同學說配置swagger后靜態資源目錄無法訪問,我自己試了下,確實訪問不了。原來的配置是:

@Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 解決swagger無法訪問
        registry.addResourceHandler("/**").addResourceLocations("classpath:/META-INF/resources/").setCachePeriod(0);
    }

   
   
  
  
          

這里是將所有的請求都指向了META-INF/resources/目錄,顯然是不對的,會導致項目的其他靜態文件目錄無法正常訪問,於是做了修改:

	@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/");
    }

   
   
  
  
          

測試一下:
在resource的static文件夾下新建index.html
在這里插入圖片描述
啟動項目訪問 http://localhost:8080/index.html
在這里插入圖片描述
訪問正常,接下來再訪問swagger:
在這里插入圖片描述
也是正常的。

在這里插入圖片描述

                      原文地址:https://blog.csdn.net/xqnode/article/details/81382160          </div>


免責聲明!

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



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