zoukankan      html  css  js  c++  java
  • spring boot swagger-ui.html 404

    spring boot swagger-ui.html 404

     

    很奇怪的问题,找了好久。

    因为spring boot+swagger实现起来很简单。看下面三部曲:

    1.pom添加两个swagger依赖.

      

    <!-- Swagger依赖包 -->
    <dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.8.0</version>
    </dependency>
    <dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.8.0</version>
    </dependency>
    <!-- Swagger end -->


    2.添加SwaggerAutoConfiguration.

    @Configuration
    @EnableSwagger2
    public class SwaggerAutoConfiguration{

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


    private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
    .title("**平台对外接口")
    .description("1.提供**后台使用的接口 2.提供对其他服务调用的服务")
    .contact(new Contact("xtj332", "https://blog.csdn.net/xtj332", "xtj332111@163.com"))
    .version("1.0")
    .build();
    }


    }
    3.浏览器访问 http://127.0.0.1:8080/swagger-ui.html

     

    但是!竟然返回大大的404!!!

     

    排查过程:

    从spring boot官网生成一个简单的spring-boot-web项目,进行上面三步,不会出现问题。

    猜测是自己添加或更改了什么webmvc之类的东西,比如引入jar包,添加config。

    最后发现同事写了一个跨域的东西:

    @Configuration
    public class WebApiConfig extends WebMvcConfigurationSupport {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
    .allowedOrigins("*")
    .allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")
    .allowCredentials(true).maxAge(3600);
    }
    把这个configuration注释掉就可以了。

    原因:

    这个自定义的类继承自WebMvcConfigurationSupport,如果你在IDE中搜索这个类的实现类,可以发现spring boot有一个子类EnableWebMvcConfiguration,并且是自动config的.我们知道,如果一个类用户自己在容器中生成了bean,spring boot就不会帮你自动config。所以,问题的原因是我们把spring boot自定义的那个bean覆盖了。

    那么我想既然使用跨域又使用swagger该怎么办呢?只需加上下面的代码。

    @Configuration
    public class WebApiConfig extends WebMvcConfigurationSupport {


    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
    registry.addResourceHandler("swagger-ui.html")
    .addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars/**")
    .addResourceLocations("classpath:/META-INF/resources/webjars/");
    super.addResourceHandlers(registry);
    }
    @Override
    public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
    .allowedOrigins("*")
    .allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")
    .allowCredentials(true).maxAge(3600);
    }

    延展:

    才开始接触spring boot,感觉是简化了spring的一些配置,并且帮开发者管理jar包版本。慢慢觉得更强大好用的地方是starter帮你自动生成bean,方便开发者。但是这也带来了一些恶果,强大的封装造成有些问题不好排查,想做一些改动引起很大的问题。
    ---------------------
    作者:freewind
    来源:CSDN
    原文:https://blog.csdn.net/xtj332/article/details/80595768

  • 相关阅读:
    PetaLinux 生成 Zynq 操作系统
    单片机、微控制器和微处理器有什么区别
    嵌入式基础概念系列(1) —— GPIO
    学中杂记
    Spring学习笔记
    jdbc一点小笔记
    JSP学习
    Servlet学习的一些笔记
    接触Struts2的ModelDriven<>接口
    android-dialog的位置
  • 原文地址:https://www.cnblogs.com/smallfa/p/13366511.html
Copyright © 2011-2022 走看看