Feign REST客户端:如何获取HTTP状态?

时间:2019-06-26 20:32:41

标签: rest hystrix feign

我使用Hystrix设置了Feign客户端,并且尝试将我从API调用获得的所有HTTP状态代码记录到数据库中。因此,这意味着,如果我的一个电话给我201,我希望将其登录到DB。如果我的呼叫导致失败,那么我的后备处理程序显然可以记录该事件,但是我想将数据库插入到一个地方。假装是否有办法获得响应或某种通用回调?

2 个答案:

答案 0 :(得分:0)

您必须提供自定义decoder才能在ResponseEntity<Object>中得到您的回复。

NotificationClient notificationClient = Feign.builder()
                .encoder(new JacksonEncoder())
                .decoder(customDecoder())
                .target(Target.EmptyTarget.create(NotificationClient.class));

在这里定义您的自定义解码器bean。您可以通过实现Decoder来定义自己的代码,但我使用的是Spring解码器。

@Bean
public Decoder customDecoder() {
    HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(customObjectMapper());
    ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(jacksonConverter);
    return new ResponseEntityDecoder(new SpringDecoder(objectFactory));
}

现在在ResponseEntity<Object>

收集您的回复
ResponseEntity<Object> response = notificationClient.notify();
int status = response.getStatusCodeValue();

答案 1 :(得分:0)

另一种选择是创建自己的feign.Logger实现,以覆盖logAndRebufferResponse方法:

protected Response logAndRebufferResponse(
   String configKey, Level logLevel, Response response, long elapsedTime);

这可能比创建Decoder更简单,并且可以确保无论状态如何,都可以在收到响应时调用它。仅在请求未触发错误时调用Decoder

相关问题