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

Я хочу использовать @ExceptionHandler для обработки любых исключений Hibernate. Если исключение не является исключением Hibernate, исключение обрабатывает ошибка @ExceptionHandler for Runtime.

проблема в том, что исключение во время выполнения всегда имеет приоритет над обработчиком исключений Hibernate. Это означает, что любое возникающее исключение гибернации обрабатывается общим обработчиком исключений времени выполнения.

Как я могу гарантировать, что исключения Hibernate обрабатываются его обработчиком исключений, а не обрабатываются исключениями времени выполнения?

    '@ExceptionHandler(HibernateException.class)
public String handleHibernateException(HibernateException exc, Model theModel) {

    String message = "An error has occured: " + exc.getLocalizedMessage() + "\n" + exc.getCause().toString()
            + "\r\n";

    myLogger.warning(message);

    theModel.addAttribute("exception", message);

    return "testing";
}

// handle any other runtime/unchecked exception and log it

@ExceptionHandler(RuntimeException.class)
public String handleRuntimeExceptions(RuntimeException exc, Model theModel) {

    String message = "An error has occured: " + exc.getLocalizedMessage() + "\n" + exc.getCause().toString()
            + "\r\n";
    myLogger.warning(message);

    theModel.addAttribute("exception", message);

    return "testing";
}'

1 Ответ

0 голосов
/ 24 апреля 2019

Проверить, является ли исключение экземпляром HibernateException, можно следующим образом:

@ExceptionHandler(RuntimeException.class)
public String handleRuntimeExceptions(RuntimeException exc, Model theModel) {
    if (exc instanceof HibernateException) {
        return handleHibernateException((HibernateException) exc.getCause(), theModel);
    } else if (exc.getCause() instanceof HibernateException) {
        HibernateException hibernateException = (HibernateException) exc.getCause();
        return handleHibernateException(hibernateException, theModel);
    }
    String message = "An error has occurred: " + exc.getLocalizedMessage() + "\n" + exc.getCause().toString() + "\r\n";
    myLogger.warning(message);
    theModel.addAttribute("exception", message);
    return "testing";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...