我们使用两种方式来配置Path断言,一种是yml配置文件,一种是通过java类的方式配置:
YML方式配置
StripPrefix 的意思是比如 比如gateway的地址是:localhost:6500/yml/** 如果StripPrefix配置的是1,就会在localhost:6500后面的第一个 yml给去掉,同时把localhost:6500给替换为feign-client
spring:
cloud:
gateway:
routes:
- id: feignclient
uri: lb://feign-client
predicates:
- Path=/yml/**
filters:
- StripPrefix=1
java类的方式配置
package com.example.gatewaysample;
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;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpMethod;
@Configuration
public class GatewayConfiguration {
@Bean
@Order
public RouteLocator customizedRoutes(RouteLocatorBuilder routeLocatorBuilder){
return routeLocatorBuilder.routes()
.route(r->r.path("/java/**")
.and().method(HttpMethod.GET)
.and().header("name")
.filters(f->f.stripPrefix(1)
.addResponseHeader("java-param","gateway-config")
)
.uri("lb://feign-client")
)
.route(r->r.path("/wang/**")
.and().method(HttpMethod.GET)
.filters(f->f.stripPrefix(1)
)
.uri("lb://feign-client")
)
.build();
}
}
两种方式都可以配置,都可以生效,下面是测试截图:
下面是actuator展示的gateway的所有路由,可以看到通过java类生成的路由和配置文件生成的路由展示方式不一样,java类的展示方式会把java类的tostring给展示出来。
image.png image.png
最终测试路由规则:
image.png
当然如果你测试的是java这条路由,就需要在发送请求的时候在header里面添加一个叫做name的参数信息。
网友评论