springcloud gateway集成swagger3实现API统一入口

springcloud gateway集成swagger3实现API统一入口

背景

项目使用springcloud gateway作为网关,统一路由各个服务的请求。产品为微服务架构,每一个web controller聚合服务都需要暴露接口给前端(VUE组件实现swagger自动配置API出入参和类型)。在云原生背景下,暴露每个web聚合服务的路由运维成本高且使用不方便。因此使用网关作为open api入口,实现每个聚合服务的接入、访问和debug.

组件

spring-cloud-starter-gateway:2.2.6.RELEASE
springfox-swagger:3.0.0

简易架构图

请添加图片描述

接入swagger

1. 聚合服务

  • pom
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
        </dependency>
  • configuration for java code
package com.lee.web.config.swagger;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;

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

@Configuration
@EnableOpenApi
public class SwaggerConfig {
   
    @Value("${swagger.switch:true}")
    private String switchFlag;

    /**
     * docket 不加载也可以,swagger会有默认的docket,其作用是分组
     *
     * @return Docket
     */
    @Bean(value = "WebApiDocket")
    @Profile({
   "dev", "test", "pre"})
    public Docket defaultApiDocket() {
   
        return new Docket(DocumentationType.OAS_30)
                // 开启开关
                .enable(Boolean.parseBoolean(switchFlag))
                .apiInfo(apiInfo())
                // 分组名称
                .groupName("WebApiDocket")
                //分组名称
                .select()
                //这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.basePackage("com.lee.web"))
                // 分组路径
                .paths(PathSelectors.any())
                .build();
                // .securitySchemes(securitySchemes())
                // .securityContexts(securityContexts());
    }

    private ApiInfo apiInfo() {
   
        return new ApiInfoBuilder().title("web页面")
                .description("web页面")
                .contact(new Contact("lighter", null, "lee@gmail.com"))
                .version("lee.v1.0")
                .build();
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值