前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring boot swagger-ui.html 404

spring boot swagger-ui.html 404

作者头像
庞小明
发布2019-05-25 18:05:56
4.7K0
发布2019-05-25 18:05:56
举报
文章被收录于专栏:pangguoming

因为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,方便开发者。但是这也带来了一些恶果,强大的封装造成有些问题不好排查,想做一些改动引起很大的问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档