Получите сообщение об исключении SQL от DataIntegrityViolationException - PullRequest
0 голосов
/ 03 мая 2018

Работа над вызовом API, который изменяет некоторые данные в БД. Я пытаюсь предоставить значимое сообщение от API в случае возникновения исключения в JPA Layer. При любом сбое запуска SQL-запроса я получаю исключение DataIntegrityViolationException от JPA, которое не содержит точной причины сбоя. Поэтому я извлекаю из него исключение SQLException, а затем отвечаю сообщением об ошибке.

private String getSQLExceptionMessage(DataIntegrityViolationException e) {
    Throwable nextException = e.getCause();
    while (!nextException.getClass().equals(SQLException.class) && nextException.getCause() != null
            && !nextException.getClass().equals(nextException.getCause().getClass())) {
        nextException = nextException.getCause();
    }
    return nextException.getMessage();
}

Есть ли лучший способ сделать это?

1 Ответ

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

В Spring есть служебный класс NestedExceptionUtils, который getMostSpecificCause метод можно использовать, чтобы получить «корневую» причину любого исключения.

Что касается обработки ошибок - вы можете реализовать пользовательский обработчик исключений для DataIntegrityViolationException, извлечь имя ограничения из первопричины, проанализировать его и создать соответствующее сообщение для пользователя.

Некоторые примеры обработки ошибок: 1 , 2 .

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