Я пытаюсь перехватить некоторые внутренние исключения и затем предложить конечным пользователям более приятные сообщения. Но когда дело доходит до этого исключения:
Исключение 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");
}
}
Есть что-то, что я пропустил, спасибо за любые полезные детали.