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

Gdg*_*ers 5 rest hystrix feign

我使用 Hystrix 设置了 Feign 客户端,并且尝试将从 API 调用中获得的所有 HTTP 状态代码记录到数据库中。所以这意味着,如果我的一个电话给我一个 201,我想把它记录到数据库中。如果我的调用导致失败,我的回退处理程序显然可以记录这一点,但我想在一个地方进行数据库插入。feign 是否有办法访问响应或某种一般回调?

Muh*_*man 1

您必须提供自定义decoder才能获得您的回复ResponseEntity<Object>

NotificationClient notificationClient = Feign.builder()
                .encoder(new JacksonEncoder())
                .decoder(customDecoder())
                .target(Target.EmptyTarget.create(NotificationClient.class));
Run Code Online (Sandbox Code Playgroud)

您可以在此处定义自定义解码器 bean。你可以通过实现来定义你自己的Decoder,但我使用的是 spring 解码器。

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

现在收集您的回复ResponseEntity<Object>

ResponseEntity<Object> response = notificationClient.notify();
int status = response.getStatusCodeValue();
Run Code Online (Sandbox Code Playgroud)