У меня есть REST Api на основе SpringBoot, структурированный следующим образом:
Rest Controller -> Service -> Repository
и мне интересно, как именно обрабатывать исключения "правильно".
Например, скажем, кто-то вызывает конечную точку / myresources / {id} с несуществующим {id}. Вызов делегируется службе, которая в свою очередь пытается получить MyResource из репозитория. Это терпит неудачу и возвращает ноль. Затем служба генерирует исключение MyResourceNotFoundException.
Теперь мне нужен определенный формат для моих ошибок REST, поэтому у меня есть @ControllerAdvice ResponseEntityExceptionHandler, который обрабатывает пользовательскую сериализацию этих исключений (@ExceptionHandler (MyResourceNotFoundException.class)).
Fine.
Но это приведет к большой обработке / переводу для каждого отдельного пользовательского исключения. Поэтому я подумал, что мог бы это обобщить, добавив коды и сообщения HttpStatus в базовый абстрактный класс исключений, который MyResourceNotFound и другие будут расширять и переопределять. Таким образом, ResponseEntityExceptionHandler будет просто обрабатывать создание моей пользовательской ошибки DTO стандартным способом.
Но потом я понял, что добавляю концепции REST к исключению, выдаваемому на уровне обслуживания. Они не должны знать о таких понятиях ...
Может быть, мне следует перехватить исключение MyResourceNotFoundException в контроллере и выдать еще одно исключение, относящееся к слою, которое содержит соответствующие сообщения, HttpStatus и т. Д., Чтобы обработать это в общем случае в ResponseEntityExceptionHandler ...
Что вы думаете об этом?