我正试图让一个Feign客户端在下游调用的方法签名为(@RequestBody someObject, @RequestHeaders Map<String, String> headers)
的情况下工作。但我无法找到任何可行的解决方案。尝试过@HeaderMap注释,但Feign忽略了它,并告诉我在方法中有太多的RequestBody参数。@RequestHeader只允许设置单个声明性标头。我不确定RequestInterceptor是否也能工作,因为我需要从以前的请求中传递这些头。我觉得Sleuth已经以某种方式做到了——所以我认为这必须是可能的。
所以我没有找到一个很好的解决方案,但我提出的解决方案是使用FeignRequestInterceptor
向存储在ThreadLocal中的请求添加头,ThreadLocal是在调用FeignClient
实现之前设置的。这不是最优雅的,如果我们放弃每个请求1个线程的模式,那就不起作用了,但我现在能想到的都是。