java 使用Spring Cloud OpenFeign的伪装响应拦截器

4si2a6ki  于 2023-01-07  发布在  Java
关注(0)|答案(1)|浏览(606)

Feign现在支持ResponseInterceptor类。我可以用Spring Cloud Feign来实现它吗?或者我需要使用Feign.builder()?
在我的自定义FeignConfig中尝试如下:

@Bean
public ClientResponseInterceptor responseInterceptor() {
    return new ClientResponseInterceptor();
}

但似乎不起作用。有什么想法如何注入自定义响应拦截器?

bgibtngc

bgibtngc1#

我没有成功使用ResponseInterceptor。
但是我找到了一个替代方法,使用faign.codec.Decoder
在本例中,我正在阅读每个Feign客户端响应的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只是一个示例)

相关问题