Java 未调用假错误解码器

Java 未调用假错误解码器,java,feign,Java,Feign,您好,我创建了简单的ErrorDecoder,但未调用它: 配置: @Bean UserClient userClient ( @Value( "${url}" ) final String url ) { return Feign .builder() .client( new OkHttpClient() ) .errorDecoder( new FeignErrorDecoder() )

您好,我创建了简单的ErrorDecoder,但未调用它:

配置:

@Bean
UserClient userClient ( @Value( "${url}" ) final String url )
{
    return Feign
            .builder()
            .client( new OkHttpClient() )
            .errorDecoder( new FeignErrorDecoder() )
            .encoder( new GsonEncoder() )
            .decoder( new GsonDecoder() )
            .logger( new Slf4jLogger( UserClient.class ) )
            .logLevel( Level.FULL )
            .target( UserClient.class, url );
}
错误解码器:

@Slf4j
public class FeignErrorDecoder implements ErrorDecoder
{
    @Override
    public Exception decode ( String methodKey, Response response )
    {
        if(response.status() != 200) {
            log.error( "ERROR" );
        }
        return errorStatus(methodKey, response);
    }
}

然后stacktrace显示RetryableException的Invaction,我在任何地方都看不到我的日志。我做错了什么吗?

只有在收到响应且响应代码不是2xx时才会调用错误解码器。如果请求失败,则不会调用错误解码器,因为已用尽最大重试次数。在这种情况下,异常被抛出到调用方法


如果您想在重试期间应用逻辑,除了您的
错误解码器
尝试返回非200状态代码外,您还需要提供自己的
重试器

像这样:

@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseEntity<String> defaultException(Exception ex) {
    LogBack.error(ex.getMessage(),ex);
    return ResponseEntity.status(400).body("");
}
@ExceptionHandler(Exception.class)
@应答器
公共响应默认异常(异常ex){
LogBack.error(例如getMessage(),例如);
返回ResponseEntity.status(400).body(“”);
}