Обработчик исключений не работает в приложении с весенней загрузкой, @RestControllerAdvice никогда не вызывался, и я использую низкоуровневый клиент - PullRequest
0 голосов
/ 24 марта 2019

Попытка настроить глобальный настраиваемый механизм обработки исключений, который опирается на @RestControllerAdvice, который может обрабатывать исключения.

@ RestControllerAdvice ** обработчик исключений не запускается вообще.Здесь я использую низкоуровневый клиент.

У меня был настроен следующий совет контроллера для возврата контракта API для условий ошибки:

Я попытался добавить ниже

@ExceptionHandler(value = { ResponseException.class })
public ApiErrorResponse noHandlerFoundException(Exception ex) {
    LOG.error(ex.getCause().toString());
    int status = ((ResponseException) ex).getResponse().getStatusLine().getStatusCode();
    return new ApiErrorResponse(status, "<some message depending on status code>");
}

но виден тот же результат

pom.xml:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
    </properties>

GlobalControllerExceptionHandler:

    @RestControllerAdvice
    public class GlobalControllerExceptionHandler extends ResponseEntityExceptionHandler{

        private static final Logger LOG = Logger.getLogger(GlobalControllerExceptionHandler.class);

        @ExceptionHandler(value = { ConstraintViolationException.class })
        @ResponseStatus(HttpStatus.BAD_REQUEST)
        public ApiErrorResponse constraintViolationException(ConstraintViolationException ex) {
            LOG.error(ex.getCause().toString());
            return new ApiErrorResponse(400, "Bad Request");
        }

        @ExceptionHandler(value = { NoHandlerFoundException.class })
        @ResponseStatus(HttpStatus.NOT_FOUND)
        public ApiErrorResponse noHandlerFoundException(Exception ex) {
            LOG.error(ex.getCause().toString());
            return new ApiErrorResponse(404, "Resource Not Found");
        }

        @ExceptionHandler(value = { Exception.class })
        @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
        public ApiErrorResponse unknownException(Exception ex) {
            LOG.error(ex.getCause().toString());
            return new ApiErrorResponse(500, "Internal Server Error");
        }
    }

ApiErrorResponse:

    public class ApiErrorResponse {

        private int status;
        private String message;

        public ApiErrorResponse(int status, String message) {
            this.status = status;
            this.message = message;
        }

        public int getStatus() {
            return status;
        }

        public String getMessage() {
            return message;
        }

        @Override
        public String toString() {
            return new ToStringBuilder(this).append(status)
                                            .append(message)
                                            .toString();
        }
    }

Theпроблема в том, что я использую стороннюю библиотеку, чтобы что-то делать.

1 Ответ

0 голосов
/ 24 марта 2019

Убедитесь, что ваш совет контроллера сканируется.

Для этого вы можете поместить класс совета контроллера во внутренний пакет из основного класса приложения весенней загрузки, чтобы пружинная загрузка автоматически просканировала все внутренние пакеты.

или

Попробуйте добавить @EnableWebMvc аннотацию к вашему классу конфигурации.

См. этот пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...