spring-gateway网关聚合swagger实现多个服务接口切换的方法
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文小编为大家详细介绍"spring-gateway网关聚合swagger实现多个服务接口切换的方法",内容详细,步骤清晰,细节处理妥当,希望这篇"spring-gateway网关聚合swagger实
千家信息网最后更新 2026年11月01日spring-gateway网关聚合swagger实现多个服务接口切换的方法
本文小编为大家详细介绍"spring-gateway网关聚合swagger实现多个服务接口切换的方法",内容详细,步骤清晰,细节处理妥当,希望这篇"spring-gateway网关聚合swagger实现多个服务接口切换的方法"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
前提条件
微服务已经集成了swagger,并且注册进了nacos。
gateway配置
package com.zmy.springcloud.config;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.cloud.gateway.route.RouteLocator;import org.springframework.stereotype.Component;import springfox.documentation.swagger.web.SwaggerResource;import springfox.documentation.swagger.web.SwaggerResourcesProvider;import java.util.*;/** * 聚合各个服务的swagger接口 */@Componentpublic class MySwaggerResourceProvider implements SwaggerResourcesProvider { /** * swagger2默认的url后缀 */ private static final String SWAGGER2URL = "/v2/api-docs"; /** * 网关路由 */ private final RouteLocator routeLocator; /** * 网关应用名称 */ @Value("${spring.application.name}") private String self; @Autowired public MySwaggerResourceProvider(RouteLocator routeLocator) { this.routeLocator = routeLocator; } @Override public List get() { List resources = new ArrayList<>(); List routeHosts = new ArrayList<>(); // 获取所有可用的host:serviceId routeLocator.getRoutes().filter(route -> route.getUri().getHost() != null) .filter(route -> !self.equals(route.getUri().getHost())) .subscribe(route -> routeHosts.add(route.getUri().getHost())); // 记录已经添加过的server Set dealed = new HashSet<>(); routeHosts.forEach(instance -> { // 拼接url String url = "/" + instance.toLowerCase() + SWAGGER2URL; if (!dealed.contains(url)) { dealed.add(url); SwaggerResource swaggerResource = new SwaggerResource(); swaggerResource.setUrl(url); swaggerResource.setName(instance); resources.add(swaggerResource); } }); return resources; }} package com.zmy.springcloud.config.swagger.controller;import com.zmy.springcloud.config.MySwaggerResourceProvider;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import springfox.documentation.swagger.web.*;import java.util.List;/** * swagger聚合接口,三个接口都是swagger-ui.html需要访问的接口 */@RestController@RequestMapping("/swagger-resources")public class SwaggerResourceController { private MySwaggerResourceProvider swaggerResourceProvider; @Autowired public SwaggerResourceController(MySwaggerResourceProvider swaggerResourceProvider) { this.swaggerResourceProvider = swaggerResourceProvider; } @RequestMapping(value = "/configuration/security") public ResponseEntity securityConfiguration() { return new ResponseEntity<>(SecurityConfigurationBuilder.builder().build(), HttpStatus.OK); } @RequestMapping(value = "/configuration/ui") public ResponseEntity uiConfiguration() { return new ResponseEntity<>(UiConfigurationBuilder.builder().build(), HttpStatus.OK); } @RequestMapping public ResponseEntity> swaggerResources() { return new ResponseEntity<>(swaggerResourceProvider.get(), HttpStatus.OK); }}
org.springframework.cloud spring-cloud-starter-gateway io.springfox springfox-swagger2 2.9.2 io.swagger swagger-models io.swagger swagger-models 1.5.22 io.springfox springfox-swagger-ui 2.9.2 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
server: port: 9527spring: application: name: cloud-gateway cloud: gateway: routes: - id: seata-storage-service uri: lb://seata-storage-service predicates: - Path=/seata-storage-service/** # 断言,相匹配的进行路由 filters: - StripPrefix=1 - id: seata-account-service uri: lb://seata-account-service - Path=/seata-account-service/** discovery: locator: enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由 nacos: server-addr: localhost:8848
- StripPrefix=1是必须配置的,跳过- Path的第一段路径。
http://localhost:2003/v2/api-docs 这个是正确的swagger数据请求地址。不加- StripPrefix=1的话,swagger在请求数据时候会请求http://localhost:2003/seata-account-service/v2/api-docs,这样就会请求不到数据。
如果不加- StripPrefix=1,也有其他的解决方案,可以在微服务提供者中配置服务上下文路径
server: servlet: context-path: /seata-order-service
注意网关的拦截器,不要将swagger请求拦截掉。
读到这里,这篇"spring-gateway网关聚合swagger实现多个服务接口切换的方法"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
服务
接口
网关
路由
多个
方法
切换
数据
文章
配置
内容
路径
妥当
三个
上下
上下文
前提
功能
动态
名称
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技名片
互联网是第几次科技革命的成果
互联网科技工作委员会毛军
圆梦互联网科技
互联网下的科技发展
互联网金融公司科技
美国互联网科技
善班互联网科技
互联网金融监管科技
安控科技rtu产品工业互联网
互联网汽车科技小镇
央行互联网金融科技公司
字节跳动和互联网科技
威龙国际互联网科技公司
沐思想互联网科技有限公司
山东星卡互联网科技有限公司官网
上海钢联属于互联网科技股吗
易企秀互联网科技是做什么的
优雇互联网科技有限公司
山东亿川互联网科技有限责任公司
互联网科技公司
科技企业和互联网企业
互联网 科技
金融科技 互联网金融
艾特科技互联网
科技互联网创业计划书
科技大学互联网
国大互联网教育科技有限公司薪资
皮皮虾互联网科技有限公司
如何强化互联网金融科技