当前位置: 首页 > 知识库问答 >
问题:

如何为Spring云网关中的发现定位器编写复杂谓词?

龚德本
2023-03-14

我想自定义发现定位器行为。例如,我的例子之一是从gateway_host/probidens路由到名为probidens-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

共有1个答案

古扬
2023-03-14

属性spring.cloud.gateway.discovery.locator.predicates引用谓词定义列表,请参见org.springframework.cloud.gateway.discovery.discoverylocatorproperties。您指定的内容将转换为字符串,因此无法转换为所需的类型。

您可以尝试按以下方式指定谓词:

spring:
  cloud:
    gateway:
      discovery:
        locator:
          predicates: 
          - name: Path
            args:
              pattern: '/'+serviceId.substring(0,serviceId.indexOf('-UI'))+'/**'
 类似资料:
  • 我想编写自己的定位器来访问元素。WebDriver的API目前提供了八个定位器,允许按id、名称属性、标记名、完整或部分链接文本、XPath、类名和css选择器检索元素。然而,这些默认定位器现在对我来说还不够,因为我必须通过一个新属性访问元素。让我举个例子,这样你就能明白我在这里真正想要的是什么。 示例:选择您的用户名: 现在,我想编写一段代码,以便使用myLocator定位器访问用户名按钮,如:

  • 在下面的spring cloud gateway配置中,我试图用匹配路径结束,但它不能匹配路径: spring cloud gateway打印以下日志:

  • 是否可以使用spring云网关配置的谓词部分检查标头授权,我的目标是在一个或多个endpoint上进行一些基本授权 我正在使用应用程序.yml 进行路由配置

  • 我一直在读关于spring cloud gateway在我的微服务架构中实现API网关的文章。我需要阻止某些URL我一直在使用一些内部操作。但是,我已经像在Zuul中一样在gateway中使用了IgnoredServices和IgnoredPatterns,但是在Spring cloud gateway链接中没有这样的东西。我的内部API以/internal/{something}开头。 同样,我

  • 我正在使用spring云网关作为边缘服务器。这就是流程 问题是,响应有响应是得到正确的200代码,注入的头是在响应上出现,但数据是不可用的响应。