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

假装REST客户端:如何获取HTTP状态?,rest,hystrix,feign,Rest,Hystrix,Feign,我已经用Hystrix安装了假客户端,我正在尝试将从API调用中获得的所有HTTP状态代码记录到数据库中。这意味着,如果我的一个电话给了我一个201,我想把它记录到数据库中。如果我的调用导致失败,我的回退处理程序显然可以记录这一点,但我希望在一个位置执行DB插入。Faign是否有办法访问响应或某种常规回调 您必须提供自定义的解码器,才能在ResponseEntity中获得您的响应 在这里,您可以定义自定义解码器bean。您可以通过实现解码器来定义自己的解码器,但我使用的是spring解码器 @B

我已经用Hystrix安装了假客户端,我正在尝试将从API调用中获得的所有HTTP状态代码记录到数据库中。这意味着,如果我的一个电话给了我一个201,我想把它记录到数据库中。如果我的调用导致失败,我的回退处理程序显然可以记录这一点,但我希望在一个位置执行DB插入。Faign是否有办法访问响应或某种常规回调

您必须提供自定义的
解码器
,才能在
ResponseEntity
中获得您的响应

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

@Bean
public Decoder customDecoder() {
    HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(customObjectMapper());
    ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(jacksonConverter);
    return new ResponseEntityDecoder(new SpringDecoder(objectFactory));
}
@Bean
公共解码器customDecoder(){
HttpMessageConverter jacksonConverter=新映射Jackson2HttpMessageConverter(customObjectMapper());
ObjectFactory ObjectFactory=()->新的HttpMessageConverter(jacksonConverter);
返回新的ResponseEntityCoder(新的SpringDecoder(objectFactory));
}
现在在
ResponseEntity

ResponseEntity response=notificationClient.notify();
int status=response.getStatusCodeValue();

另一个选项是创建自己的
外部记录器
实现,覆盖
日志和缓冲响应
方法:

protected Response logAndRebufferResponse(
   String configKey, Level logLevel, Response response, long elapsedTime);
这可能比创建
解码器
更简单,并且保证在收到响应时调用,而不管状态如何<仅当请求未触发错误时,才会调用代码>解码器

ResponseEntity<Object> response = notificationClient.notify();
int status = response.getStatusCodeValue();
protected Response logAndRebufferResponse(
   String configKey, Level logLevel, Response response, long elapsedTime);