作者:方雷
个人博客:http://blog.chargingbunk.cn/
微信公众号:rayson_666(Rayson开发分享)
个人专研技术方向:
- 微服务方向:springboot, springCloud, Dubbo
- 分布式/高并发: 分布式锁, 消息队列RabbitMQ
- 大数据处理: Hadoop, spark, HBase等
- python方向: python web开发
喜欢的朋友们可以关注我的简书或微信公众号(rayson_666), 一起交流学习, 后期会不断更新有经验的干货.
一,前言
承接上一篇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
@EnableWebMvc
public 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框架。
参考资料