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

spring boot swagger-ui.html 404    spring boot swagger-ui.html 404

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

spring boot swagger-ui.html 404    spring boot 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

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

因为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

spring boot swagger-ui.html 404    spring boot swagger-ui.html 404

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

spring boot swagger-ui.html 404    spring boot 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