Задать вопрос
@geronix

Как реализуется обработка исключений на корпоративных проектах?

Здравствуйте!

Пишу проект на спринге, в проекте использую технологии spring framework, spring security, spring mvc, spring data, hibernate, mysql, java 8, rest. В процессе разработки возникает много вопросов, один из них касается обработки исключений на больших корпоративных проектах. На прошлых проектах я как то и не совсем понял, как реализуется обработки исключений. Да и самостоятельно, как то не получается разобраться, не понимаю я эту обработку исключений и все). Подскажите пожалуйста, как реализуется обработки исключений на больших проектах? Если можно с примерами. Более детальные вопросы.
1-как обрабатывать ошибки бд(Mysql) констрейны, длина, отвалился конект к бд и т. д.?
2-я использую rest, в ответе клиенту я отправляю обертку
Response<T>{
private boolean status;
    private T data;
    private Error error;
} при ошибки в него кладу объект 
Error {
    private ErrorReason reason; //enum
    private List<ErrorEnum> messages;
}

так вот я нашел пример с общим обработчиком на весь проект, но проблема в том, что я тогда не смогу использовать свою обертку Response. Получается что я не смогу использовать Response если буду использовать общий обработчик?
3-есть какие то стандартные коды ошибок бд которые нужно обязательно обрабатывать?
  • Вопрос задан
  • 865 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Для того, чтобы обрабатывать исключения можно:
1. Воспользоваться аннотацией @ExceptionHandler. Чтобы не прописывать её в каждом контроллере и не использовать наследование, её можно применить к методу в классе с аннотацией @ControllerAdvice
2. Реализовать свой HandlerExceptionResolver и зарегистрировать его в WebMvcConfigurer
Ответ написан
Комментировать
В Spring можно определять хендлер всех исключений и ошибок через аннотацию @ExceptionHandler, заведите базовый контроллер с методом и этой аннотацией, например BaseRestController, и наследуйте все контроллеры от него. Внутри метода возвращайте объект JSON со статусом ошибки 500 и текстом ошибки, а также не забывайте логировать исключение, обязательно (например через slf4j).

500 статус говорит о том, что произошла внутренняя ошибка, никаких http статусов для ошибок БД нет.

Этого будет всего достаточно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы