SpringCloud - GATEWAY与SWAGGER3的集成与使用

3、微服务整合Swagger3.0 - 网关Gateway聚合接口 微服务整合Swagger3.0,在网关Gateway聚合接口 阅读详情

写在前面

在基于SpringCloud的项目中,各个微服务都有基于SWAGGER的在线API文档,所以将SWAGGER在线构建API文档创建了一个公共的场景启动器。如果要查看多个API文档怎么办呢? 一般会输入不同的IP:PORT查看不同微服务的文档,这样比较麻烦,所以将SWAGGER与GATEWAY进行聚合和集成,仅仅通过切换即可方便的查看。

操作步骤

1. 添加依赖
<!-- Swagger -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
</dependency>
2. 创建聚合系统接口
/**
 * 聚合系统接口
 * @author ROCKY
 */
@Component
@Primary
@AllArgsConstructor
public class SwaggerProvider implements SwaggerResourcesProvider {
    // SWAGGER3默认的URL后缀
    public static final String SWAGGER3URL = "/v3/api-docs";
    // 网关路由
    @Autowired
    private RouteLocator routeLocator;

    @Autowired
    private GatewayProperties gatewayProperties;

    // 聚合其他服务接口
    @Override
    public List<SwaggerResource> get() {
        List<SwaggerResource> resourceList = new ArrayList<>();
        List<String> routes = new ArrayList<>();
        // 获取网关中配置的route
        routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
        gatewayProperties.getRoutes().stream()
                .filter(routeDefinition -> routes
                        .contains(routeDefinition.getId()))
                .forEach(routeDefinition -> routeDefinition.getPredicates().stream()
                        .filter(predicateDefinition -> "Path".equalsIgnoreCase(predicateDefinition.getName()))
                        .forEach(predicateDefinition -> resourceList
                                .add(swaggerResource(routeDefinition.getId(), predicateDefinition.getArgs()
                                        .get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("/**", SWAGGER3URL)))));
        return resourceList;
    }

    private SwaggerResource swaggerResource(String name, String location) {
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName(name);
        swaggerResource.setLocation(location);
        swaggerResource.setSwaggerVersion("3.0");
        return swaggerResource;
    }
}
3.创建swagger-resources的控制器
/**
 * SWAGGER-RESOURCES控制对象
 * @author ROCKY
 */
@RestController
@RequestMapping("/swagger-resources")
public class SwaggerHandler {
    @Autowired(required = false)
    private SecurityConfiguration securityConfiguration;

    @Autowired(required = false)
    private UiConfiguration uiConfiguration;

    private final SwaggerResourcesProvider swaggerResources;

    @Autowired
    public SwaggerHandler(SwaggerResourcesProvider swaggerResources) {
        this.swaggerResources = swaggerResources;
    }

    @GetMapping("/configuration/security")
    public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {
        return Mono.just(new ResponseEntity<>(
                Optional.ofNullable(securityConfiguration)
                        .orElse(SecurityConfigurationBuilder.builder().build()),
                HttpStatus.OK));
    }

    @GetMapping("/configuration/ui")
    public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {
        return Mono.just(new ResponseEntity<>(
                Optional.ofNullable(uiConfiguration)
                        .orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
    }

    @SuppressWarnings("rawtypes")
    @GetMapping("")
    public Mono<ResponseEntity> swaggerResources() {
        return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
    }
}
4. APPLICATION.YML

在APPLICATION.YML需要进行以下配置,同时注意需要添加filters。

server:
  port: 8080
spring:
  application:
    name: servicex-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedOriginPatterns: "*"
            allowed-methods: "*"
            allowed-headers: "*"
            allow-credentials: true
            exposedHeaders: "Content-Disposition,Content-Type,Cache-Control"
      locator:
        enabled: true
        lowerCaseServiceId: true
      routes:
        # 唯一标识 - 系统核心服务
        - id: servicex-system
          uri: lb://servicex-system
          predicates:
            - Path=/api/servicex/system/**
          filters:
            - StripPrefix=3
        # 唯一标识 - 系统用户服务
        - id: servicex-user
          uri: lb://servicex-user
          predicates:
            - Path=/api/servicex/user/**
          filters:
            - StripPrefix=3
        # 唯一标识 - 商品服务
        - id: servicex-mallx-spu
          uri: lb://servicex-mallx-spu
          predicates:
            - Path=/api/servicex/mallx/spu/**
          filters:
            - StripPrefix=4
        # 唯一标识 - 订单服务
        - id: servicex-mallx-order
          uri: lb://servicex-mallx-order
          predicates:
            - Path=/api/servicex/mallx/order/**
          filters:
            - StripPrefix=4
4. 访问方式

http://网关IP:8080/swagger-ui/index.html

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

相关推荐

Spring Cloud Gateway + Swagger 3.0 实战:一个网关搞定所有微服务API文档(附Spring Security登录配置)

本文详细介绍了如何通过Spring Cloud Gateway与Swagger 3.0深度整合,构建企业级微服务API文档中心。通过网关动态聚合各微服务的Swagger文档,并集成Spring Security实现安全的登录访问控制,提供了一套完整的生产级解决方案。

weixin_28688385的博客 246

【JAVA】在SpringCloud Alibaba 2021微服务Gateway网关项目中整合Swagger3

hey-girl东拼西凑原创文章,若有歧义可留言,若需转载需标明出处 前言唠个五毛钱:想做到的效果,通过网关访问swagger地址,可以看到所有服务的API文档。这个要求不过份吧。 开始干活前,我就斗胆先给和我一样懵逼的兄弟扫盲下。不难发现,当我们百度搜索swagger的配置整合时候。我们总是会发现好多兄弟引入的包都不一样。给大家截图看看。下面这些是不是都是我们常见的包。看到五花八门的包是不是给整懵了。所以我就去找了下文档。潦草的学习了下。 swagger是什么? 了表尊重,官网传送先放上swagger

Hey-Girl 3137

8、spring cloud 每个微服swagger3统一聚合在同一个入口

8

a13826548428的博客 859

SpringCloudGateway整合swagger3文档

SpringCloud项目中,微服务模块和网关模块必不可少。按照以前SpringBoot的模式,单个服务拥有自己的Api文档(Swagger文档),引入微服务后,多文档管理成了一个问题。我们需要统一一个入口方便前端同学查看。本篇文章就是把各个微服务的api文档,集成到网关服务下面。

4256

服务集成swagger3 / Gateway聚合swagger / 打印请求参数及统计执行时长过滤器

服务集成swagger3 Gateway聚合swagger 打印请求参数及统计执行时长过滤器

yushun的博客 1409

深入解析Sigma Delta调制器 —— 从电流采样到数字信号处理的完整链路

本文深入解析了Sigma Delta调制器的工作原理与应用。通过剖析过采样、噪声整形与负反馈核心机制,并结合AMC1306等实例,详细阐述了从电流采样到数字信号处理的完整链路。该技术凭借其高精度和高抗干扰能力,在ADC、电流测量及音频处理等领域发挥着关键作用。

ttt77的博客 645

分布式接口文档的实现,Gateway集成Swagger3

最近在做一个分布式项目,目前到了整合阶段,突然发现接口文档十分分散,于是想要集成到一起。网上找了很多文章,对我都没有太大帮助,最后再几经辗转加上自己修改了一些代码后,终于成功了。 默认你的分布式架构已经搭建完毕,只差将全部的接口文档都整合到一个端口下。 如下: 第一步: 在你的Gateway和Provider中全部引入Jar: <!--swagger--> <dependency> <groupId>io...

weixin_40169609的博客 1942

Unity游戏开发必备:HybridCLR热更新实战教程(含iOS/Android适配指南)

本文详细介绍了HybridCLR在Unity游戏开发中的热更新实战教程,包括iOS/Android平台适配指南。通过环境配置、项目结构规划、热更新工作流实现等步骤,帮助开发者高效掌握C#热更新技术,解决移动游戏快速迭代的痛点问题。

weixin_29011395的博客 441

springcloud-gateway集成knife4j(swagger3)

对于管控了权限的微服务,应放行以下资源。保证启动了knife4j。各微服务&网关引入依赖。

JustryDeng 9680

AI时代敏捷开发新范式——意图驱动开发IDD

具体的功能代码、单元测试、集成测试用例,以及最终可运行的、支持PlantUML的Markdown转Word工具新版本。:业务方(如技术文档团队)反馈,现有的Markdown转Word工具在处理包含PlantUML代码块的文档时,无法正确生成图表,导致技术方案、架构图等关键信息丢失,严重影响了文档交付质量和团队效率。这不仅带来了交付周期显著缩短、资源效能倍增的可观收益,更深远的意义在于,它描绘了未来软件工业化、智能化的新图景:一个由精准意图驱动、AI自主执行、人类智慧引领的敏捷、高效、高质的新世界。

LiuJunjiang的专栏 557

利用dxflib读写cad文件

本篇主要在qt做一个例子读取cad文件数据,使用的开源库是dxflib。用到dxflib的DL_CreationAdapter,DL_Dxf。DL_Dxf是用来读取.dxf文件的类,DL_CreatinAdapter是一个容器,当DL_Dxf加载.dxf文件后,就会响应DL_CreationAdapter这个类,读取cad数据。我们来看看...

weixin_33759269的博客 1984

springcloud alibaba gateway方式集成swagger3.0

springcloud alibaba gateway方式集成swagger3.0

hlvy 3546

Fiori Elements Analytical List Page 标题区配置全攻略:从变体、过滤模式到 UI.KPI 的工程化落地

ALP标题区是Fiori Elements Analytical List Page的核心交互区域,承担变体管理、过滤模式切换、KPI展示等关键功能。本文系统解析了标题区的组成结构、可用能力及工程实现要点,包括:1)标题区包含过滤类型切换、全局KPI、变体管理等交互元素;2)详细说明视觉过滤与紧凑过滤的同步规则及实现方式;3)介绍OData V2下通过UI.KPI注解配置标题区KPI的方法;4)提供manifest.json配置示例和CDS注解写法。文章还对比了V2与V4版本的差异,为ALP开发提供实用指导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 246

SpringCloud Gateway与swagger集成解决方案

spring cloud gateway 底层采用的是webflux,swagger2暂时不支持webflux,网上的解决方案虽然有一些,比如这篇文章 还有《重新定义spring cloud 实战》这本书也有解决方案,书源码链接,我们项目里面采用的是集成了最新的swagger3 snapshot版本,需要引入的pom文件有: <dependency> <g...

weixin_33743248的博客 862

【WorkBuddy从入门到精通实战教程】第 4 章 快速完成第一个 WorkBuddy 任务

摘要:WorkBuddy任务创建指南详细说明了从新建任务到结果验收的全流程。操作步骤包括:选择工作目录、设置模式(Craft/Ask/Plan)、指定AI模型、输入任务说明(需包含目标/输入/动作/约束/输出/验收6要素),可选配Skill等高级设置。文中提供三个入门示例:A)文件整理需保持原文件并生成分类方案;B)会议纪要要求结构化输出且所有内容有原文依据;C)Word转PPT需遵循品牌规范并控制页数。特别强调首次操作应在演练目录测试,处理真实数据前需确认授权范围,输出文件需检查涉密信息并按规范共享。(1

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 1382

华为OD机试真题 新系统2026-04-15 Python&JS 实现【失灵的键盘】

有一个键盘有2个按键失灵了,按下这些键时会连续输出其他键对应的字符两次。具体如下: 1. 按下j键一次,屏幕上显示uu(两个连续的u);  按下b键一次,屏幕上显示t(两个连续的t) 2. u键和t键是好的,按下u键一次时,屏幕只会显示一次u(正常按键);按下t键一次时,屏幕只会显示一次t(正常按键) 3. 假定屏幕上连续显示两个t一定是按了一次b键,而不是两次t键;假定按键t之后不会紧接着按键b,即tttt转义为两个b,而不可能是tb

MISAYAONE的博客 524

Spring Cloud:Gateway整合Springfox Swagger 3.0

前言 2020年7月份Springfox 发布了3.0.0,增加了对Webflux、OpenApi 3的支持,适应Gateway。在微服务系统中,每个业务模块使用swagger管理接口文档,同时,可以使用业务网关聚合管理各微服务的接口文档,本文重点说明Spring Cloud Gateway集成Springfox swagger 3.0,以供参考。 框架版本 Spring Boot 2.4.4 Spring Cloud 2020.0.2 Spring Cloud Alibaba

言尭的博客 7218

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring Cloud Gateway整合Swagger聚合微服务系统API文档(非Zuul)

*【源码中的Spring Boot版本为2.1.3,更新了一点小细节,主要是看思路吧】**最近在学习SpringBoot2和Spring Cloud.Finchley版,网上资料也是少的可怜,大部分还是通过一些github或者码云上的一些开源框架来学习,途中出现的一些bug也只能自己看看源码尝试解决。这个Header来获取BasePath,将它添加至接口路径与host中间,这样才能正常做接口测试,而Gateway在做转发的时候并没有这个Header添加进Request,所以发生接口调试的404错误。

m0_67401761的博客 370

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring Cloud Gateway与WebFlux下Swagger3的统一接入与动态聚合

本文详细介绍了在微服务架构中,如何通过Spring Cloud Gateway与WebFlux实现Swagger3的统一接入与动态聚合。文章从技术栈差异、依赖配置到动态聚合实现方案,提供了完整的解决方案和最佳实践,帮助开发者高效管理微服务API文档。

weixin_28677451的博客 197

spring cloud gateway集成swagger方案总结

在微服务大行其道到今天,服务到碎片化也带来了管理和监控的困难(统一集成网关系统在前面的sia-gateway的文章中有做分享,感兴趣的可以前往阅读)。 swagger为我们开发带来了极大到便利,但是在庞杂的系统中,即便对于开发的接入和调试,对各个分散对在线文档,也显得有些杂乱无章。即便是有如同yapi等在线文档系统,也同样需要精力去维护,而且对于文档与代码分离,同样会带来版本不一致和调试困难等问题。 在网关层集成swagger显得非常易用和优雅。但是面对各个公司不同网关配置方案,给swagger的集成带来和

MLTR1的博客 2556

spring cloud gateway聚合swagger2

概述 使用swagger可以生成api文档,让我们不再编写api文档,而且还自带调试功能,当然需要自己添加注解丰富文档的内容,单体服务使用swagger相信对大家来说都是没有问题的,下面将简单介绍单体服务使用swagger,以及使用gateway聚合swagger,由于swagger-ui的界面并不是那么还看,所以ui界面使用swagger-bootstrap-ui,一款界面优美的swagger-...

zlhmeng的博客 8214

Springcloud-Gateway整合swagger3

Springcloud-Gateway整合swagger3 swagger的pom节点 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> 聚合swagger-u.

qq_43653951的博客 4104

springcloud gateway 整合swagger3.0.0

版本 swagger:3.0.0 pom添加 <!-- 这是gateway的如果不需要添加 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!-- 3.0版本只需要引入一个,不再像2.

Teler的博客 5641

SpringCloud集成SpringDoc和Swagger3

它将路径重写/v3/api-docs/{SERVICE_NAME}为/{SERVICE_NAME}/v3/api-docs,由另一个负责与nacos发现交互的路由处理。因此,我们在path下有多个OpenAPI资源/v3/api-docs/{SERVICE_NAME},例如/v3/api-docs/org。时,会转发到http//edevp-gateeay8899/auth/v3/api-docs,而根据定义的路由就会请求到edevp-auth服务,由于。,正好跟我们单独访问授权中心的。...

Blueeyedboy521的博客 5489

spring cloud gateway 集成swagger2

spring cloud gateway 集成swaggwr2前言集成1、maven依赖2、配置Swagger Config3、开发遇到的问题1、不能推断出base URL可能由以下几个原因造成: 前言 我们都知道springcloud的gateway没有采用传统的阻塞式的springMVC框架,为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty,所有的请求都是异步非阻塞式的请求。而对于Web

hou11122的博客 2960
上一篇: SpringBoot - SWAGGER3公共模块的抽象集成与使用(三)
下一篇: SpringBoot - 如何实现接口幂等性?
cloneme01
博客等级 码龄20年 2万+粉丝 248原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloneme01

谢谢您的支持与鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值