我想自定义发现定位器行为。例如,在我的案例中,有一个是从gateway_host/prohibitions
路由到名为prohibitions-ui
的服务的。为此,我使用以下配置:
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true
filters: PreserveHostHeader
include-expression: serviceId.endsWith('-UI')
predicates: Path='/'+serviceId.substring(0,serviceId.indexOf('-UI'))+'/**'
然后出现错误:
Failed to bind properties under 'spring.cloud.gateway.discovery.locator.predicates' to java.util.List<org.springframework.cloud.gateway.handler.predicate.PredicateDefinition>:
Reason: failed to convert java.lang.String to org.springframework.cloud.gateway.handler.predicate.PredicateDefinition
我认为此错误上升是因为有两个参数传递给substring
方法。如果我将方法调用更改为substring(0)
,则应用程序成功启动,但是对我来说这样的配置没有意义:
predicates: Path='/'+serviceId.substring(0)+'/**'
答案 0 :(得分:0)
属性spring.cloud.gateway.discovery.locator.predicates
引用谓词定义的列表,请参见org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties
。您指定的内容将转换为String
,因此无法转换为所需的类型。
您可以尝试如下指定谓词:
spring:
cloud:
gateway:
discovery:
locator:
predicates:
- name: Path
args:
pattern: '/'+serviceId.substring(0,serviceId.indexOf('-UI'))+'/**'