zuul網(wǎng)關(guān)管理整個(gè)微服務(wù)接口文檔

image.png

zuul網(wǎng)關(guān)源碼地址: https://github.com/liangxifeng833/springcloud/tree/master/configCenter/zuul_gateway
會員服務(wù)源碼地址: https://github.com/liangxifeng833/springcloud/tree/master/parent/api-member-service-impl
訂單服務(wù)源碼地址:https://github.com/liangxifeng833/springcloud/tree/master/parent/api-order-service-impl

注意: 以上服務(wù)依賴eureka和springCloud分布式配置中心服務(wù)端,啟動(dòng)以上服務(wù)之前必須先啟動(dòng)eurekaconfigServer

eureka服務(wù)源碼地址: https://github.com/liangxifeng833/springcloud/tree/master/eureka/springcloud-eureka-service
configServer源碼地址: https://github.com/liangxifeng833/springcloud/tree/master/configCenter/config2.0_server

具體會員/訂單的服務(wù)項(xiàng)目上pom中引入依賴有兩種方式

  • 第一: 引入swagger相關(guān)的兩個(gè)依賴, 注意: 需要自己配置SwaggerConfig
        <!--swagger2 rest api -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.2.2</version>
        </dependency
  • 第二: 引入springBoot整個(gè)Swagger依賴, swagger2-spring-boot-starter,這里只有一個(gè)依賴, springBoot已經(jīng)整合好配置了, 所以不需要自己單獨(dú)配置: SwaggerConfig
        <!-- spring-boot swagger依賴 -->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.7.0.RELEASE</version>
        </dependency>

修改會員以及訂單服務(wù)的 application.yml 添加掃包配置:

  • 修改application.yml,新增:
swagger:
  base-package: api.member.service.impl

項(xiàng)目啟動(dòng)文件新增如下注解

//開啟swagger生成api文檔的注解
@EnableSwagger2Doc

在訂單服務(wù)controller中寫接口注解(注意:必須在controller中才會生效)

  • 修改會員服務(wù)的 MemberServiceImpl.java
package api.member.servcie.impl;

import api.common.base.BaseApiService;
import api.common.base.ResponseBase;
import api.member.entity.User;
import api.member.service.IMemberServcie;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 會員接口實(shí)現(xiàn),注意:實(shí)現(xiàn)的是api.member.servcie項(xiàng)目中的api接口
 */
@RestController
//swagger接口文檔相關(guān)注解
@Api(tags = "會員服務(wù)接口")
public class MemberServiceImpl extends BaseApiService implements IMemberServcie {
    @Value("${server.port}")
    private Integer serverPort;

    @ApiOperation("會員服務(wù)默認(rèn)方法")
    @GetMapping("/")
    public String index() {
        return "我是會員服務(wù),port="+serverPort;
    }

    @Override
    //swagger接口文檔相關(guān)注解--start
    @ApiOperation("查詢會員接口")
    @ApiImplicitParam(name="name",value = "會員名稱",defaultValue = "用戶信息參數(shù)",required = true)
    //swagger接口文檔相關(guān)注解--end
    @GetMapping("/getMember")
    public User getMember(@RequestParam("name") String name) {
        User user = new User();
        user.setName(name+serverPort);
        user.setAge(20);
        return user;
    }

    @GetMapping("/getUserInfo")
    @Override
    public ResponseBase getUserInfo() {
        try {
            //會員服務(wù)接口產(chǎn)生1.5秒的延遲
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return setResultSuccess("調(diào)用會員服務(wù)接口成功...");
    }

    @PostMapping("/postDemo")
    public ResponseBase postDemo(@RequestBody Map<String,Object> params)
    {
        return setResultSuccess("調(diào)用成功");
    }

訂單服務(wù)的配置與會員服務(wù)完全一樣

配置統(tǒng)一入口Zuul網(wǎng)關(guān)項(xiàng)目

  • pom中加入的依賴
        <!-- spring-boot swagger依賴 -->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.7.0.RELEASE</version>
        </dependency>
  • 項(xiàng)目啟動(dòng)文件ZuulGatewayApplication.java開啟swagger注解:
//開啟swagger文檔
@EnableSwagger2Doc  
  • 新建DocumentationConfig.java類,內(nèi)容:
package zuul_gateway;

import org.springframework.cloud.netflix.zuul.filters.RouteLocator;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;

import java.util.ArrayList;
import java.util.List;

/**
 * zuul整合swagger所用類
 * 添加文檔來源嗎
 */
@Component
@Primary
public class DocumentationConfig implements SwaggerResourcesProvider {
    private final RouteLocator routeLocator;

    public DocumentationConfig(RouteLocator routeLocator) {
        this.routeLocator = routeLocator;
    }

    /**
     * 配置所有的微服務(wù)
     *
     * @return
     */
/*    @Override
    public List<SwaggerResource> get() {
        List<SwaggerResource> resources = new ArrayList<>();
        List<Route> routes = routeLocator.getRoutes();
        routes.forEach(route -> {
            resources.add(swaggerResource(route.getId(), route.getFullPath().replace("**", "v2/api-docs"), "1.0"));
        });
        return resources;
    }*/

    /**
     * 配置特定的微服務(wù)
     * @return
     */
    @Override
    public List<SwaggerResource> get() {
        List resources = new ArrayList<>();
        //配置會員服務(wù)和訂單服務(wù)文檔路徑, 注意: api-member和api-order必須與application路由中對應(yīng)的會員和訂單服務(wù)名稱一致
        resources.add(swaggerResource("會員服務(wù)", "/api-member/v2/api-docs", "1.0"));
        resources.add(swaggerResource("訂單服務(wù)", "/api-order/v2/api-docs", "1.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;
    }
}
  • 啟動(dòng)網(wǎng)關(guān)服務(wù)后,訪問: http://127.0.0.1:8302/swagger-ui.html, 可以選擇 Select a spec選擇不同服務(wù)的文檔, 也就實(shí)現(xiàn)了文檔的統(tǒng)一入口管理.
    image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市偏友,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拴还,死亡現(xiàn)場離奇詭異蹈胡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)唆涝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唇辨,“玉大人廊酣,你說我怎么就攤上這事∩兔叮” “怎么了亡驰?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饿幅。 經(jīng)常有香客問我凡辱,道長,這世上最難降的妖魔是什么栗恩? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任透乾,我火速辦了婚禮,結(jié)果婚禮上磕秤,老公的妹妹穿的比我還像新娘乳乌。我一直安慰自己,他們只是感情好市咆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布汉操。 她就那樣靜靜地躺著,像睡著了一般蒙兰。 火紅的嫁衣襯著肌膚如雪磷瘤。 梳的紋絲不亂的頭發(fā)上芒篷,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音采缚,去河邊找鬼针炉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仰担,可吹牛的內(nèi)容都是我干的糊识。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼摔蓝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了愉耙?” 一聲冷哼從身側(cè)響起贮尉,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朴沿,沒想到半個(gè)月后猜谚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赌渣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年魏铅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坚芜。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡览芳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸿竖,到底是詐尸還是另有隱情沧竟,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布缚忧,位于F島的核電站悟泵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏闪水。R本人自食惡果不足惜糕非,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望球榆。 院中可真熱鬧朽肥,春花似錦、人聲如沸芜果。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽右钾。三九已至蚁吝,卻和暖如春旱爆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窘茁。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工怀伦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人山林。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓房待,卻偏偏與公主長得像,于是被迫代替她去往敵國和親驼抹。 傳聞我的和親對象是個(gè)殘疾皇子桑孩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容