zuul网关管理整个微服务接口文档

image.png

zuul网关源码地址: https://github.com/liangxifeng833/springcloud/tree/master/configCenter/zuul_gateway
会员服务源码地址: https://github.com/liangxifeng833/springcloud/tree/master/parent/api-member-service-impl
订单服务源码地址:https://github.com/liangxifeng833/springcloud/tree/master/parent/api-order-service-impl

注意: 以上服务依赖eureka和springCloud分布式配置中心服务端,启动以上服务之前必须先启动eurekaconfigServer

eureka服务源码地址: https://github.com/liangxifeng833/springcloud/tree/master/eureka/springcloud-eureka-service
configServer源码地址: https://github.com/liangxifeng833/springcloud/tree/master/configCenter/config2.0_server

具体会员/订单的服务项目上pom中引入依赖有两种方式

  • 第一: 引入swagger相关的两个依赖, 注意: 需要自己配置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整个Swagger依赖, swagger2-spring-boot-starter,这里只有一个依赖, springBoot已经整合好配置了, 所以不需要自己单独配置: SwaggerConfig
        <!-- spring-boot swagger依赖 -->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.7.0.RELEASE</version>
        </dependency>

修改会员以及订单服务的 application.yml 添加扫包配置:

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

项目启动文件新增如下注解

//开启swagger生成api文档的注解
@EnableSwagger2Doc

在订单服务controller中写接口注解(注意:必须在controller中才会生效)

  • 修改会员服务的 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;

/**
 * 会员接口实现,注意:实现的是api.member.servcie项目中的api接口
 */
@RestController
//swagger接口文档相关注解
@Api(tags = "会员服务接口")
public class MemberServiceImpl extends BaseApiService implements IMemberServcie {
    @Value("${server.port}")
    private Integer serverPort;

    @ApiOperation("会员服务默认方法")
    @GetMapping("/")
    public String index() {
        return "我是会员服务,port="+serverPort;
    }

    @Override
    //swagger接口文档相关注解--start
    @ApiOperation("查询会员接口")
    @ApiImplicitParam(name="name",value = "会员名称",defaultValue = "用户信息参数",required = true)
    //swagger接口文档相关注解--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 {
            //会员服务接口产生1.5秒的延迟
            Thread.sleep(1500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return setResultSuccess("调用会员服务接口成功...");
    }

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

订单服务的配置与会员服务完全一样

配置统一入口Zuul网关项目

  • pom中加入的依赖
        <!-- spring-boot swagger依赖 -->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.7.0.RELEASE</version>
        </dependency>
  • 项目启动文件ZuulGatewayApplication.java开启swagger注解:
//开启swagger文档
@EnableSwagger2Doc  
  • 新建DocumentationConfig.java类,内容:
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;
    }

    /**
     * 配置所有的微服务
     *
     * @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;
    }*/

    /**
     * 配置特定的微服务
     * @return
     */
    @Override
    public List<SwaggerResource> get() {
        List resources = new ArrayList<>();
        //配置会员服务和订单服务文档路径, 注意: api-member和api-order必须与application路由中对应的会员和订单服务名称一致
        resources.add(swaggerResource("会员服务", "/api-member/v2/api-docs", "1.0"));
        resources.add(swaggerResource("订单服务", "/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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,753评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,668评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,090评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,010评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,054评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,806评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,484评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,380评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,873评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,021评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,158评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,838评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,499评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,044评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,159评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,449评论 3 374
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,136评论 2 356

推荐阅读更多精彩内容