我有一个用例,我需要将以特定前缀开头的所有 header 传递给假客户端。我不知道这些 header 的数量或确切名称。似乎没有办法轻松做到这一点,因为 Feign 客户端希望使用 @RequestHeader("name") 指定所有 header 。它似乎不支持像 @RequestHeader HttpHeaders
这样的东西,这将是非常有用的。
有什么建议么?
最佳答案
在撰写本文时,Feign 不支持使用 Map 的动态 header 或查询参数。 Spring Cloud Feign 客户端依赖于 Spring 注解而不是 Feign 注解,并且 AnnotatedParameterProcessor
的实现存在一个错误,导致它们没有执行文档规定的操作。
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/