微服务方向:springboot, springCloud, Dubbo
分布式/高并发: 分布式锁, 消息队列RabbitMQ
大数据处理: Hadoop, spark, HBase等
python方向: python web开发
一,前言
承接上一篇SpringBoot项目实战(二十三篇):整合Swagger2构建强大的Restful Api接口文档(一)整合Swagger搭建步骤还是很简单,但是往往再真实的环境中总会出现各种奇葩的问题, 让我们很头疼。
二,踩坑小记
接下来我就分享一个出现问题的场景,并分析其背后造成的原因是什么。
出现如下问题:
访问swagger-ui.html始终出现找不到页面
如果仅仅是按照上一篇来搭建的话, 是很成功的,不会出现任何问题。那么我还是复现一下问题场景,看大家是否有出现跟我一样的场景。
复现一下问题场景:
1. 新建WebConfig配置类
package cn.rayson.config;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.CorsRegistry;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/** * 该类再项目中的作用可以添加拦截器, 以及跨域配置, 而且可以说在项目中不可缺少,占有很重要的地位 * * @author 方雷(Rayson) * @微信公众号: rayson_666(Rayson开发分享) 、 * 分享springBoot springCloud技术, 以及python,大数据学习系列 * @个人博客: http://blog.chargingbunk.cn/ * @简书: https://www.jianshu.com/u/5b0de5c8dc56 * 2018年6月9日 */@Configuration@EnableWebMvcpublic class WebConfig extends WebMvcConfigurerAdapter { /** * 此方法是用来注册跨域的 */ @Override public void addCorsMappings(CorsRegistry registry) { // TODO Auto-generated method stub super.addCorsMappings(registry); } /** * 此方法是用来注册拦截器的 */ @Override public void addInterceptors(InterceptorRegistry registry) { // TODO Auto-generated method stub super.addInterceptors(registry); } /** * 此方法是用来添加静态资源映射的 */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // TODO Auto-generated method stub super.addResourceHandlers(registry); } }
如上代码就是我创建好的WebConfig配置类, 并继承WebMvcConfigurerAdapter, @EnableWebMvc 用于启用Spring MVC的。
然后直接启动项目,然后我们来访问一下http://localhost:8080/swagger-ui.html,结果出现了Whitelabel Error Page
那么问题出现了, 我们接下来就分享下解决方案。
2.分析问题原因及解决方案
问题的原因:
如果继承了WebMvcConfigurationSupport,则在yml中配置的相关内容会失效。 需要重新指定静态资源
解决方案:
/** * 此方法是用来添加静态资源映射的 * 发现如果继承了WebMvcConfigurationSupport,则在yml中配置的相关内容会失效。 需要重新指定静态资源 */ @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); }
配置好了过后, 重新访问swagger-ui.html就可以访问成功
三,总结
我不如地狱谁入地狱。大家有没有觉得如果api接口文档中包含大量的接口文档, 而且一直是上下滚动,不方便查看和翻阅。所以下一篇后续会介绍基于swagger左右布局的swagger-ui框架。
参考资料
SpringBoot配置SwaggerUI访问404错误处理1
SpringBoot配置SwaggerUI访问404错误处理2
Springboot下swagger-ui.html访问不到
领取专属 10元无门槛券
私享最新 技术干货