spring-cloud - 如何在不知道所有名称的情况下将任意数量的 header 传递给 Feign 客户端?

标签 spring-cloud spring-cloud-netflix netflix-feign spring-cloud-feign feign

我有一个用例,我需要将以特定前缀开头的所有 header 传递给假客户端。我不知道这些 header 的数量或确切名称。似乎没有办法轻松做到这一点,因为 Feign 客户端希望使用 @RequestHeader("name") 指定所有 header 。它似乎不支持像 @RequestHeader HttpHeaders 这样的东西,这将是非常有用的。 有什么建议么?

最佳答案

在撰写本文时,Feign 不支持使用 Map 的动态 header 或查询参数。 Spring Cloud Feign 客户端依赖于 Spring 注解而不是 Feign 注解,并且 AnnotatedParameterProcessor 的实现存在一个错误,导致它们没有执行文档规定的操作。

RequestHeader文档:

If the method parameter is Map, MultiValueMap, or HttpHeaders then the map is populated with all header names and values.

RequestParam文档:

If the method parameter is Map or MultiValueMap and a parameter name is not specified, then the map parameter is populated with all request parameter names and values.

我提交了pull request这会解决这个问题。在此之前,我将使用 SpringMvcContract 的扩展,该扩展使用我自己的 AnnotatedParameterProcessor 实现。我使用 Feign.Builder 设置自定义 SpringMvcContract,如下所示:

@Autowired
FormattingConversionService feignConversionService;

@Bean
@Scope(SCOPE_PROTOTYPE)
public Feign.Builder feignBuilder() {
    return HystrixFeign.builder()
            .contract(feignContract());
}

@Bean
public Contract feignContract() {
    return new EnhancedSpringMvcContract(feignConversionService);
}

关于spring-cloud - 如何在不知道所有名称的情况下将任意数量的 header 传递给 Feign 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39645676/

相关文章:

spring-cloud - 覆盖 Zuul 过滤器 SendErrorFilter

spring-boot - 根据环境定义不同的 Feign 客户端实现

spring-cloud - 如何基于Spring Cloud架构师实现带有hystrix fallback的分布式事务

spring-mvc - 如何使用 Feign 客户端设置请求头?

java - 如何在 spring @feignclient 配置中设置自定义最大连接池大小

java - 带有 Date 类型的 spring-cloud-feign Client 和 @RequestParam

spring-cloud - 为什么 ZUUL 强制使用 SEMAPHORE 隔离来执行其 Hystrix 命令?

spring - SpringCloudGateway-记录传入的请求URL和相应的路由URI

java - Eureka 租约续约如何进行?

spring-security - Spring Cloud Config Server - 在哪里设置 encrypt.key 以启用/encrypt 端点