Feign现在支持ResponseInterceptor类。我可以用Spring Cloud Feign来实现它吗?或者我需要使用Feign.builder()?在我的自定义FeignConfig中尝试如下:
@Bean public ClientResponseInterceptor responseInterceptor() { return new ClientResponseInterceptor(); }
但似乎不起作用。有什么想法如何注入自定义响应拦截器?
bgibtngc1#
我没有成功使用ResponseInterceptor。但是我找到了一个替代方法,使用faign.codec.Decoder。在本例中,我正在阅读每个Feign客户端响应的Content-Language:
Content-Language
public class ClientResponseInterceptor implements Decoder { private final JacksonDecoder delegate; public ClientResponseInterceptor(JacksonDecoder delegate) { this.delegate = delegate; } @Override public Object decode(Response response, Type type) throws IOException, FeignException { String contentLanguageFromFeignResponse; Collection<String> contentLanguage = response.headers().get(HttpHeaders.CONTENT_LANGUAGE); // Extract this part in another method if (contentLanguage != null && !contentLanguage.isEmpty()) { Optional<String> attributeOpt = contentLanguage.stream().findFirst(); if (attributeOpt.isPresent()) { contentLanguageFromFeignResponse = attributeOpt.get(); } } // Do something with contentLanguageFromFeignResponse return delegate.decode(response, type); } }
并在您的faign配置文件中声明它:
@Bean public ClientResponseInterceptor responseInterceptor() { return new ClientResponseInterceptor(new JacksonDecoder(/*objectMapper*/)); }
(You可以使用另一个解码器,JacksonDecoder只是一个示例)
1条答案
按热度按时间bgibtngc1#
我没有成功使用ResponseInterceptor。
但是我找到了一个替代方法,使用faign.codec.Decoder。
在本例中,我正在阅读每个Feign客户端响应的
Content-Language
:并在您的faign配置文件中声明它:
(You可以使用另一个解码器,JacksonDecoder只是一个示例)