Как написать сложный предикат для локатора обнаружения в Spring Cloud Gateway? - PullRequest
0 голосов
/ 11 октября 2018

Я хочу настроить поведение локатора обнаружения.Одним из моих случаев является, например, маршрутизация от 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)+'/**'

...