SpringCloud+Gateway+Swagger2

这篇具有很好参考价值的文章主要介绍了SpringCloud+Gateway+Swagger2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

做个笔记,并分享()。。。

学习链接:

Spring Cloud Gateway系列【13】 整合knife4j实现网关聚合接口文档_knife4j-gateway-spring-boot-starter-CSDN博客

1、需求:

实现knife4j样式的接口文档;各个模块都加载到gateway;

效果图:

SpringCloud+Gateway+Swagger2,spring cloud,gateway,spring

2、准备工作

第一步:搭建SpringCloud框架(不具体写步骤了)

第二步:新建一个Gateway模块,命名cloud-api-gateway

(如果添加了过滤器、security,可能需要检查是否会拦截,可能需要在拦截的地方将 "/v2/api-docs"、样式等放行。。。)

引入依赖

<!--gateway-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

yml配置文件中添加(具体操作和作用自行搜索)

    gateway:
      discovery:
        locator:
          enabled: true  #表明gateway开启服务注册和发现的功能,并且spring cloud gateway自动根据服务发现为每一个服务创建了一个router,这个router将以服务名开头的请求路径转发到对应的服务
          lower-case-service-id: true  #是将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时将服务名转成大写的了
#      routes:
#        -id: mcroservice-payment  #自定义id,无意义但不能重复,最好跟服务名保持一致
#        uri: lb://mcroservice-payment  # 注册中心中的服务器名称
#        predicates:
#          - Path=/payment/** # 转发该路径
#        filters:
#          - StripPrefix=1 #必须加上StripPrefix=1,否则访问服务时会带上user
      # 经过gateWay网关时,需要在网关统一配置跨域请求,全部通过
      globalcors:
        cors-configurations:
          '[/**]':
            allowed-origins: "*"
            allowed-headers: "*"
            allow-credentials: true
            allowed-methods:
              - GET
              - POST
              - DELETE
              - PUT
              - OPTION

第三步:新建swagger模块,用于设置展示的样式,我是新建了一个common子模块,再在子模块下新建了cloud-common-swagger(方便统一管理工具类)

引入依赖

<dependencies>
    <!--knife4j文档,其实包含springfox依赖-->
    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>knife4j-spring-boot-starter</artifactId>
        <version>2.0.9</version>
    </dependency>

  	<!-- swagger2-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
</dependencies>

项目结构图:

SpringCloud+Gateway+Swagger2,spring cloud,gateway,spring

3、操作步骤

3.1、cloud-common-swagger模块

3.1.1 新建config文件夹并创建类SwaggerConfiguration

@Configuration
@EnableSwagger2
@EnableKnife4j
public class SwaggerConfiguration {

    @Bean(value = "userApi")
    @Order(value = 1)
    public Docket groupRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(groupApiInfo())
                .select()
                // 加载所有包含Api的             
                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(this.getParameterList());// 全局配置
    }

    private ApiInfo groupApiInfo() {
        return new ApiInfoBuilder()
                .title("swagger")
                .description("<div style='font-size:14px;color:red;'>swagger-bootstrap-ui-demo RESTful APIs</div>")
                .termsOfServiceUrl("http://www.group.com/")
                .contact("group@qq.com")
                .version("1.0")
                .build();
    }

    /**
     * 添加head参数配置
     * @return
     */
    private List<Parameter> getParameterList() {
        ParameterBuilder clientIdTicket = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<Parameter>();
        clientIdTicket.name("token").description("token令牌") //自定义名称
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false).build(); //设置false,表示clientId参数 非必填,可传可不传!
        pars.add(clientIdTicket.build());
        return pars;
    }
}

3.2、cloud-api-gateway模块

如果是单体项目,前面已经可以实现了。多服务项目需要统一管理,现在是为了聚合所有服务的接口。

3.2.1 引入swagger的依赖

<!-- swagger2依赖 (网关不写业务,但是需要聚合所有服务的接口方便查看)-->
<dependency>
	<groupId>com.github.xiaoymin</groupId>
	<artifactId>knife4j-spring-boot-starter</artifactId>
	<version>2.0.9</version>
</dependency>

3.2.2 新建swagger文件夹(每个功能点新建一个文件夹方便查看维护)

 页面其实是通过/swagger-resources 路径来访问展示资源的,那么我们可以重写这个接口。将资源加载到下边。

@Component
@RequiredArgsConstructor
public class MySwaggerResourceProvider implements SwaggerResourcesProvider {

    /**
     * swagger2默认的url后缀
     */
    private static final String SWAGGER2_URL = "/v2/api-docs";

    /**
     * 路由定位器
     */
    private final RouteLocator routeLocator;

    /**
     * 网关应用名称
     */
    @Value("${spring.application.name}")
    private String gatewayName;

    /**
     * 获取 Swagger 资源
     */
    @Override
    public List<SwaggerResource> get() {
        List<SwaggerResource> resources = new ArrayList<>();
        List<String> routeHosts = new ArrayList<>();
        // 1. 获取路由Uri 中的Host=> 服务注册则为服务名=》app-service001
        routeLocator.getRoutes()
                .filter(route -> route.getUri().getHost() != null)
                .filter(route -> !gatewayName.equals(route.getUri().getHost()))
                .subscribe(route -> routeHosts.add(route.getUri().getHost()));
        // 2. 创建自定义资源
        for (String routeHost : routeHosts) {
            String serviceUrl = "/" + routeHost + SWAGGER2_URL; // 后台访问添加服务名前缀
            SwaggerResource swaggerResource = new SwaggerResource(); // 创建Swagger 资源
            swaggerResource.setUrl(serviceUrl); // 设置访问地址
            swaggerResource.setName(routeHost); // 设置名称
            swaggerResource.setSwaggerVersion("3.0.0");
            resources.add(swaggerResource);
        }
        return resources;
    }
}
@RestController
@RequestMapping("/swagger-resources")
@RequiredArgsConstructor
public class SwaggerResourceController {


    private final MySwaggerResourceProvider swaggerResourceProvider;

    @RequestMapping
    public ResponseEntity<List<SwaggerResource>> swaggerResources() {
        return new ResponseEntity<>(swaggerResourceProvider.get(), HttpStatus.OK);
    }
}

4、演示结果

访问地址:http://ip:port/doc.html#/home

子模块中引入cloud-common-swagger模块,因为我们要统一版本管理,需要swagger文档的就引入

在启动类中加入注解  @EnableSwagger2

在Controller方法上加上对应的swagger注解

启动模块后再启动gateway模块就可以了文章来源地址https://www.toymoban.com/news/detail-788325.html

到了这里,关于SpringCloud+Gateway+Swagger2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot整合Swagger2

    在团队开发中,一个好的 API 文档不但可以减少大量的沟通成本,还可以帮助一位新人快速上手业务。传统的做法是由开发人员创建一份 RESTful API 文档来记录所有的接口细节,并在程序员之间代代相传。这种做法存在以下几个问题: 1)API 接口众多,细节复杂,需要考虑不同

    2023年04月16日
    浏览(38)
  • 第二章:Swagger2

    目录 背景介绍 什么是Swagger2 常用注解 SpringBoot整合Swagger2 生产环境下屏蔽Swagger2 修改Swagger2配置类 修改application.yml 使用maven package打包测试 运行测试 在团队开发中,一个好的 API 文档不但可以减少大量的沟通成本,还可以帮助一位新人快速上手业务。传统的做法是由开发人员

    2024年02月22日
    浏览(42)
  • 微服务接口工具Swagger2

    ##1、什么是Swagger? 核心功能 生成接口说明文档 生成接口测试工具 1)、添加依赖 2)、增加Swagger配置类 如上代码所示,通过  @Configuration  注解,让 Spring 加载该配置类。再通过  @EnableSwagger2  注解来启用Swagger2。成员方法  createRestApi  函数创建  Docket  的Bean之后, apiInfo

    2024年01月17日
    浏览(39)
  • SpringBoot——Swagger2 接口规范

    优质博文:IT-BLOG-CN 如今, REST 和微服务已经有了很大的发展势头。但是, REST 规范中并没有提供一种规范来编写我们的对外 REST 接口 API 文档。每个人都在用自己的方式记录 api 文档,因此没有一种标准规范能够让我们很容易的理解和使用该接口。我们需要一个共同的规范和

    2024年02月04日
    浏览(47)
  • 接口工具Swagger2和Swagger-UI的使用

    目录 一、为什么需要接口可视化工具? 二、Swagger-UI介绍: 1、在项目的pom文件中导入swagger2的依赖 2、下载Swagger-UI项目 3、引入Swagger-UI 4、编写配置文件 第一种: 第二种: 5、访问api文档页面 6、如果访问失败,则进行第六步,如果访问成功,就不用操作了。 我们的项目通常

    2024年02月08日
    浏览(54)
  • SpringBoot使用Swagger2生成接口文档

            通过一下配置,将Swagger2自动配置进SpringBoot中             通过@Api注解和@ApiOperation注解说明模块作用及接口说明。         通过访问路径http://localhost:8088/doc.html,说明一下8088是我SpringBoot的端口号,你们填你们自己的,不同版本的Swagger访问的路径是不一样的。

    2024年01月25日
    浏览(45)
  • Spring Boot 整合 Swagger2 纠错

            因为我要建立的是微服务的项目,需要建立许多模块,以至于我在父工程中引入了当前模块,然后我在子模块中又引入了当前模块,造成了冲突。         另外一种解决方法是,经过上网查证,可能由于Spring Boot和Swagger版本的问题,Spring Boot2.6以上的版本,需要使用

    2024年02月12日
    浏览(41)
  • Java技术-接口文档-Swagger2&Swagger3&接口文档UI整合

    目录 一、Swagger2完整用法 1.POM依赖 2.接口类 3.实现类 4.托管静态资源 5.接口文档配置 6.生产环境关闭接口文档 7.Swagger3页面效果 二、Swagger3完整用法 三、Swagger整合Knife4jUi 1.POM依赖 2.接口类 3.实现类 4.托管静态资源 5.接口文档配置 6.生产环境关闭接口文档 四、注释和参数讲解

    2024年02月16日
    浏览(49)
  • Springboot整合Swagger2后访问swagger-ui.html 404报错

    在spring boot项目中配置Swagger2,配置好了但是访问确实404,SwaggerConfig中的注入方法也执行了还是访问不到页面。究其原因是MVC没有找到swagger-ui包中的swagger-ui.html文件和css样式、js等文件。 解决⽅案: ⽅案1. 降低Swagger2的使用版本 ⽅案2. 使⽤配置⼀下+swagger-ui.html+指定的css⽬录

    2024年02月11日
    浏览(40)
  • springboot 2.7版本整合swagger2代码实现

    1.导入swagger2依赖 2.添加swagger配置类 3.启动项目就这么easy  4.easy个屁,报错了,抛出了异常信息:   Failed to start bean \\\'documentationPluginsBootstrapper\\\'; nested exception is java.lang.NullPointerException: Cannot invoke \\\"org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns() 5.发现这是sp

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包