@ExceptionHandler не работает для определенного исключения из спящего режима - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь перехватить некоторые внутренние исключения и затем предложить конечным пользователям более приятные сообщения. Но когда дело доходит до этого исключения:

Исключение StackTrace

08/May/2018:20:39:09.947 +0800 ERROR o.h.e.j.spi.SqlExceptionHelper [] ERROR: update or delete on table "alert_rule" violates foreign key constraint "alert_alert_rule_id_fkey" on table "alert"
  Detail: Key (id)=(58) is still referenced from table "alert".
08/May/2018:20:39:09.977 +0800 ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] [] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [alert_alert_rule_id_fkey]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause
org.postgresql.util.PSQLException: ERROR: update or delete on table "alert_rule" violates foreign key constraint "alert_alert_rule_id_fkey" on table "alert"
  Detail: Key (id)=(58) is still referenced from table "alert".

Кажется, @ExceptionHandler(value = {javax.validation.ConstraintViolationException.class, org.hibernate.exception.ConstraintViolationException.class}) работает не так, как ожидалось.

Я только что проверил этот пост , который указывает, что специфический обработчик исключений должен обрабатываться при использовании с general обработчиком.

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

@RestControllerAdvice
@Slf4j
public class GlobalControllerExceptionHandler {

    @ExceptionHandler(value = {javax.validation.ConstraintViolationException.class,
            org.hibernate.exception.ConstraintViolationException.class})
    public void constraintViolationException(Exception ex,
                                                      WebRequest req) {
        log.error("Constraint violation while processing {}", req.toString());
    }



    @ExceptionHandler(value = {Exception.class})
    public void unknownException(Exception ex, WebRequest req) {
        log.error("Unknown Internal Exception happens");
    }
}

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

1 Ответ

0 голосов
/ 08 мая 2018

Вы пытаетесь обработать DataIntegrityViolationException, но ваш обработчик исключений обрабатывает только ConstraintViolationException s.

Добавить тип исключения в обработчик:

@ExceptionHandler({
    javax.validation.ConstraintViolationException.class,
    org.hibernate.exception.ConstraintViolationException.class,
    org.springframework.dao.DataIntegrityViolationException})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...