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

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

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

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

Войти через центр авторизации
Похожие вопросы