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);
}