Spring Cloud Zuul 整合 swagger

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18416057/article/details/81281580

          最近我们有一个需求,就是把各个系统的swagger文档集中在一起。有了这么一个需求之后,我去百度了,结合swagger的源码实现了一下

首先我们可以先看看单个系统的swagger页面,

第一部分是一个下拉框,就是一个选择swagger资源的下拉框,默认就是本应用;

第二部分是一个请求,是第一部分数据的请求

第三部分是第二部分请求的一个结果展示,json部分一共有三个key,由图片可知第一个key是name,第二个key是location。也就是这个资源的访问url,第三个key是version,也就是版本号

根据我们自己的需求,怎么将各个系统的api数据集中在一起呢?其实思路可以从我上面的截图得到。

步骤1:

首先要先从swagger源码中找到第二步的请求源码,如下

红线区域是核心,主要就是生成swaggerResource返回给前端,默认是只返回本document的swaggerResource。

步骤2:

理解步骤1之后,其实我们可以大概能想象怎么处理我们之前的需求。处理方式就是自定义resourceProvide类实现SwaggerResourceProvider接口,然后我们只要重写get方法,代码如下:

@Component
    @Primary
    class MySwaggerResourcesProvider implements SwaggerResourcesProvider {
        @Override
        public List<SwaggerResource> get() {
            List resources = new ArrayList<>();
            resources.add(swaggerResource("service-a", "/swagger-service-a/v2/api-docs", "2.0"));
            resources.add(swaggerResource("service-b", "/swagger-service-b/v2/api-docs", "2.0"));
            return resources;
        }

        private SwaggerResource swaggerResource(String name, String location, String version) {
            SwaggerResource swaggerResource = new SwaggerResource();
            swaggerResource.setName(name);
            swaggerResource.setLocation(location);
            swaggerResource.setSwaggerVersion(version);
            return swaggerResource;
        }
    }

主要是get方法,代码主要把增加了各个系统的swaggerResource(数据访问来源),

SwaggerResource有三个参数,

第一个参数:名称,也就是之前那个下拉框的选择条名称

第二个参数:url,就是访问具体系统swagger的链接

第三个参数:version ,就是swagger的版本

之后就启动网关项目,访问网关项目的swagger地址就可以看到各个系统集中的api数据了

猜你喜欢

转载自blog.csdn.net/qq_18416057/article/details/81281580
今日推荐