spring boot 使用 swagger 404

Posted by 梁小生 on 2019-01-24

配置使用

  1. 在pom.xml 增加如下内容
1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
  1. 建立一个SwaggerConfig配置类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    @Bean
    public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
    .apiInfo(apiInfo())
    .select()
    .apis(RequestHandlerSelectors.any())
    .paths(PathSelectors.any())
    .build();
    }

    private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
    .title("Spring Boot中使用Swagger2构建RESTful APIs")
    .description("图书子系统")
    .termsOfServiceUrl("更多请关注http://www.baidu.com")
    .contact("liangwei")
    .version("1.0")
    .build();
    }
    }
  2. 错误原因:因为WebApiConfig继承的类和 Swagger设置的类冲突了,重置了系统的bean

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @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);
    }
  3. Swagger和CORS一起使用的解决办法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    @Configuration
    @AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
    public class WebConfiguration 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);
    }

    /**
    * CROS跨域的处理
    */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
    .allowedOrigins("*")
    .allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")
    .allowCredentials(true).maxAge(3600);
    }
    }
  4. 访问的时候,本地http://localhost+ 端口的访问方式是可以的。但是在打包成war到服务器上时,却不行。是因为war的访问方式是要:ip+ 端口+ war包名+ swagger-ui.html