ExceptionHandler с использованием CustomErrorDecoder для клиента Feign - PullRequest
1 голос
/ 07 июля 2019

Я использую openFeign от Netflix для создания REST-связи с внешним API.Я использовал Feign errorDecoder для обработки ложных исключений.

public class MyErrorDecoder implements ErrorDecoder {

private final ErrorDecoder defaultErrorDecoder = new Default();

@Override
public Exception decode(String methodKey, Response response) {
    if (response.status() == 404) {
        return new MyNotFoundException();

    return defaultErrorDecoder.decode(methodKey, response);
}}

Чтобы забрать MyErrorDecoder к Spring, я поместил его в ApplicationContext:

@Bean
public MyErrorDecoder myErrorDecoder() {
  return new MyErrorDecoder();
}

Я также реализовал класс ExceptionTranslator для обработкиэти исключения.

@ControllerAdvice
public class ExceptionTranslator {
    private static final Logger log = LoggerFactory.getLogger(ExceptionTranslator.class);


    @ExceptionHandler(MyNotFoundException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public ErrorData myNotFoundExc(MyNotFoundException exception){
        log.warn(exception.getMessage(), exception);
        return new ErrorData(exception.getMessage());
    }

    @ExceptionHandler(Exception.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ErrorData processRuntimeException(Exception exception){
        log.error(exception.getMessage(), exception);
        return new ErrorData(exception.getMessage());
    }

}

Всякий раз, когда приложение выдает MyNotFoundException, оно потребляется @ExceptionHandler(Exception.class) вместо @ExceptionHandler(MyNotFoundException.class).Когда я удалил @ExceptionHandler(Exception.class), он работает так, как я хочу.

У кого-нибудь есть идеи, как добиться ожидаемого поведения?

...