我爱编程

SpringBoot项目实战(二十三篇):整合Swagger2构

2018-06-09  本文已影响326人  raysonfang

作者:方雷
个人博客:http://blog.chargingbunk.cn/
微信公众号:rayson_666(Rayson开发分享)
个人专研技术方向:

  • 微服务方向:springboot, springCloud, Dubbo
  • 分布式/高并发: 分布式锁, 消息队列RabbitMQ
  • 大数据处理: Hadoop, spark, HBase等
  • python方向: python web开发

喜欢的朋友们可以关注我的简书或微信公众号(rayson_666), 一起交流学习, 后期会不断更新有经验的干货.

一,前言

承接上一篇SpringBoot项目实战(二十三篇):整合Swagger2构建强大的Restful Api接口文档(一)整合Swagger搭建步骤还是很简单,但是往往再真实的环境中总会出现各种奇葩的问题, 让我们很头疼。

image.png

二,踩坑小记

接下来我就分享一个出现问题的场景,并分析其背后造成的原因是什么。

出现如下问题:
访问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

image.png

那么问题出现了, 我们接下来就分享下解决方案。

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就可以访问成功


image.png

三,总结

我不如地狱谁入地狱。大家有没有觉得如果api接口文档中包含大量的接口文档, 而且一直是上下滚动,不方便查看和翻阅。所以下一篇后续会介绍基于swagger左右布局的swagger-ui框架。

参考资料

上一篇下一篇

猜你喜欢

热点阅读