Spring Cloud Zuul 整合 swagger

          最近我們有一個需求,就是把各個系統的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數據了

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章