美文网首页我爱编程
SpringBoot项目实战(二十三篇):整合Swagger2构

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

作者: raysonfang | 来源:发表于2018-06-09 17:53 被阅读326次

    作者:方雷
    个人博客: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框架。

    参考资料

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/dkateftx.html