Spring cloud 如何在不知道所有名称的情况下将任意数量的头传递给假客户端?

Spring cloud 如何在不知道所有名称的情况下将任意数量的头传递给假客户端?,spring-cloud,spring-cloud-netflix,netflix-feign,spring-cloud-feign,feign,Spring Cloud,Spring Cloud Netflix,Netflix Feign,Spring Cloud Feign,Feign,我有一个用例,需要将以某个前缀开头的所有头传递给外部客户机。我不知道这些标题的编号或确切名称。似乎没有一种方法可以轻松做到这一点,因为外部客户端希望使用@RequestHeader(“name”)指定所有头。它似乎不支持类似于@RequestHeader-HttpHeaders,这将非常有用。 有什么建议吗 从中,您应该能够为动态标题指定标题映射 如果头字段键和值都是动态的,并且可能键的范围无法提前知道,并且在同一api/客户端中的不同方法调用之间可能会有所不同(例如,自定义元数据头字段,如“x

我有一个用例,需要将以某个前缀开头的所有头传递给外部客户机。我不知道这些标题的编号或确切名称。似乎没有一种方法可以轻松做到这一点,因为外部客户端希望使用
@RequestHeader(“name”)
指定所有头。它似乎不支持类似于
@RequestHeader-HttpHeaders
,这将非常有用。 有什么建议吗

从中,您应该能够为动态标题指定标题映射

如果头字段键和值都是动态的,并且可能键的范围无法提前知道,并且在同一api/客户端中的不同方法调用之间可能会有所不同(例如,自定义元数据头字段,如“x-amz-meta-”或“x-goog-meta-”),可以使用HeaderMap对映射参数进行注释,以构造使用映射内容作为其头参数的查询

@RequestLine(“POST/”)
空柱(@HeaderMap-HeaderMap);

在撰写本文时,Feign不支持使用映射的动态标题或查询参数。SpringCloud外部客户端依赖于Spring注释而不是外部注释,并且
AnnotatedParameterProcessor
的实现有一个bug,以至于它们不执行文档中说明的应该执行的操作

文件:

如果方法参数是Map、MultiValueMap或HttpHeaders,则 映射用所有标题名称和值填充

文件:

如果方法参数是Map或MultiValueMap以及参数名称 如果未指定,则映射参数将填充所有请求 参数名称和值

我提交了一份解决方案。在此之前,我使用的是
SpringMvcContract
的扩展,它使用我自己的
AnnotatedParameterProcessor
实现。我使用
Feign.Builder
设置自定义
SpringMVC合同
,如下所示:

@Autowired
FormattingConversionService feignConversionService;

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

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

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

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