我需要拦截HTTP响应并更改HTTP状态代码。例如,我可能会更改200到400 (基于响应对象本身),以便调用ErrorDecoder。
我需要在不扩展feign.Client类的情况下这样做!(事实上,我使用的feign.httpclient.ApacheHttpClient是最终的!)
我试图为ResponseMapper提供一个实现,但是在HTTP检查完成后,响应映射程序(以及我用来覆盖的Decoder )似乎才会被调用!
我在这里主要讨论SynchronousMethodHandler和AsyncResponseHandler的实现是如何工作的。
总结一下,我的主要问题是AsyncResponseHandler#handleResponse不会在ErrorDecoder之前调用Decoder (因此是ResponseMapper),如果调用了,ResponseMapper就可以执行我需要的HTTP状态代码。
发布于 2022-08-31 21:21:26
要克服这个缺点,我需要重新编写代码中的实现类(而不是依赖spring引导的自动配置)。
@Bean
public Client feignClient(HttpClient httpClient) {
var client = new ApacheHttpClient(httpClient);
return (request, options) -> convertResponse(client.execute(request, options));
}
private Response convertResponse(Response response) throws IOException {
// ...
}https://stackoverflow.com/questions/73559543
复制相似问题