Java Spring云网关重定向

Java Spring云网关重定向,java,spring-cloud,api-gateway,Java,Spring Cloud,Api Gateway,我有一个简单的要求,就是用新的uri替换旧的uri,这样客户机仍然可以调用旧的uri 我的API网关在端口8090上运行,它连接到Eureka服务器 这是网关中的属性文件 spring.application.name=api-gateway-server server.port=8090 eureka.client.serviceUrl.defaultZone=http://localhost:9100/eureka spring.cloud.gateway.discovery.locato

我有一个简单的要求,就是用新的uri替换旧的uri,这样客户机仍然可以调用旧的uri

我的API网关在端口8090上运行,它连接到Eureka服务器

这是网关中的属性文件

spring.application.name=api-gateway-server
server.port=8090
eureka.client.serviceUrl.defaultZone=http://localhost:9100/eureka

spring.cloud.gateway.discovery.locator.enabled=true

spring.cloud.gateway.discovery.locator.lower-case-service-id=true

logging.level.root=DEBUG
通过网关的旧API是

http://localhost:8090/currency-conversion-service/currency-convertor-feign/from/USD/to/INR/456
其中,“货币兑换服务”是Eureka中目标应用程序的名称

货币转换服务应用程序中的URI已更改为

/currency-convertor-v2/from/USD/to/INR/456

所以我想要的是当客户端点击API网关URL时

http://localhost:8090/currency-conversion-service/currency-convertor-feign/from/USD/to/INR/456
请求被重定向到

/currency-convertor-v2/from/USD/to/INR/456
在货币兑换服务中

这是我试图在网关应用程序中编写的代码

package com.kingshuk.springcloudprojects.apigatewayserver;

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ApiRoutingConfiguration {

    @Bean
    public RouteLocator applicationRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p -> p.path("/currency-convertor-feign/**")
                        .filters(gatewayFilterSpec -> gatewayFilterSpec
                                .rewritePath("/currency-convertor-feign/(?<remaining>.*)"
                                , "/currency-convertor-v2/${remaining}}"))
                        .uri("http://currency-conversion-service/"))
                .build();
    }
}
package com.kingshuk.springcloudprojects.apigatewayserver;
导入org.springframework.cloud.gateway.route.RouteLocator;
导入org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
导入org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.Configuration;
@配置
公共类ApiRoutingConfiguration{
@豆子
公用路由器连接器应用程序路由器连接器(路由器连接器构建器构建器){
returnbuilder.routes()
.route(p->p.path(“/currency convertor-feign/**”)
.过滤器(网关过滤器规范->网关过滤器规范
.rewritePath(“/currency convertor-feign/(?*)”
,“/currency-convertor-v2/${remaining}”))
.uri(“http://currency-conversion-service/"))
.build();
}
}
但它不起作用。不断地出错。API网关日志中不会打印任何异常

我对SpringCloudGateway有点陌生,所以如果我能在这方面得到一些帮助,那就太好了

谢谢更新:

它现在可以工作,并根据的建议进行以下代码调整。感谢你的帮助

@Bean
    public RouteLocator applicationRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p -> p.path("/currency-conversion-service/currency-convertor-feign/**")
                        .filters(gatewayFilterSpec -> gatewayFilterSpec
                                .rewritePath("/currency-conversion-service/currency-convertor-feign/(?<remaining>.*)"
                                , "/currency-convertor-v2/${remaining}"))
                        .uri("lb://currency-conversion-service/"))
                .build();
    }
@Bean
公用路由器连接器应用程序路由器连接器(路由器连接器构建器构建器){
returnbuilder.routes()
.route(p->p.path(“/currency-conversion-service/currency-convertor-feign/**”)
.过滤器(网关过滤器规范->网关过滤器规范
.rewritePath(“/currency conversion service/currency convertor feign/(?*)”
,“/currency-convertor-v2/${remaining}”))

.uri(“lb://货币转换服务/”) .build(); }
lb://currency-conversion-service/已经尝试过了……不起作用……但是感谢您的回复您说“不断出现错误”,什么错误?“试过了……没用”,发生了什么事?抱歉搞混了。我在任何地方都没有得到任何异常,只是它没有重定向,我在浏览器中得到了白标签错误页面。您要点击的路径以/currency conversion service/currency convertor feign/开头,但您的路径谓词不包括该路径
@Bean
    public RouteLocator applicationRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p -> p.path("/currency-conversion-service/currency-convertor-feign/**")
                        .filters(gatewayFilterSpec -> gatewayFilterSpec
                                .rewritePath("/currency-conversion-service/currency-convertor-feign/(?<remaining>.*)"
                                , "/currency-convertor-v2/${remaining}"))
                        .uri("lb://currency-conversion-service/"))
                .build();
    }