java - Spring Cloud Gateway:将路径 /a 映射到路径 /b
问题描述
我正在使用 Spring Cloud Gateway 开始一个新的 Spring Boot 项目:我需要为现有的 REST API 实现一个代理应用程序。
代理应用程序将实现新功能(端点),同时将所有发送到现有端点的请求转发给“旧”应用程序。
(然后我将按照类似于Strangler Pattern的方法逐步将现有端点移动到新应用程序)
但我还需要重写几个现有端点的路径,例如:
return routeLocatorBuilder.routes()
.route(p -> p
.path("/new-endopint")
.map("/old-endpoint") // <= is there something like 'map' method?
.uri("http://old-app-url")).build();
这可能吗?有没有办法将端点映射到另一个端点?
解决方案
在云网关中,可以通过应用和org.springframework.cloud.gateway.route.RouteDefinition
将传入请求映射到上游。FilterDefinition
PredicateDefinition
您可以通过查看org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator
.
所以一个简单的例子可以解决你的用例RouteDefinitionLocator
。InMemoryRouteDefinitionRepository
如果您想继续使用高级 API,那么org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder.RouteSpec#predicateBuilder
( org.springframework.cloud.gateway.route.builder.GatewayFilterSpec#rewritePath
...) 看起来很有希望。
return routeLocatorBuilder.routes()
.routes()
.route(
p ->
p.path("/new-endpoint/**")
.filters(
spec ->
spec.rewritePath(
"/new-endpoint/(?<segment>.*)", "/old-endpoint/${segment}"))
.uri("http://old-app-url"))
.build();
推荐阅读
- php - Python Imports 不会在 PHP 中给出输出
- matlab - 在 Matlab (Ubuntu) 上下载/安装 Psychtoolbox 的问题
- c - LibHaru C Windows 安装问题
- android - 有没有办法让 EditText 始终处于焦点而不触碰?
- python-3.x - 通过插值匹配 4D 数组中的 3D 矢量?
- python - 如何在保持 NaN 值的同时使用 pandas.melt()?
- node.js - 如何使用 node.js 和请求包将数据 POST 或 PUT 到谷歌工作表中
- excel - Excel VBA - 将数组写入工作表
- r - Weibull 与时间相关的结果
- spring-boot - 当消费者宕机时,Kafka 消息会丢失