Как правильно обрабатывать валидационные / технические / бизнес-ошибки в Spring? - PullRequest
0 голосов
/ 26 марта 2020

В настоящее время я пишу небольшое приложение Spring в качестве университетского проекта, и я не уверен, как сделать проверку и / или обработку ошибок наиболее простым в обслуживании способом. Я уже прочитал несколько статей по этому поводу, и большинство из них касались аннотаций JSR-303 и Spring Validators и, за исключением использования @ExceptionHandler.

Прежде чем я продолжу объяснять, чего я действительно хочу достичь (или, скорее, то, чего я хочу избежать), я быстро даю gr asp текущего способа обработки ошибок. В моем приложении примерный поток состоит из трех этапов, пока он не получит информацию. От начальных классов контроллеров, где определены конечные точки, до соответствующих сервисов, которые обрабатывают бизнес-логику, и, наконец, до репозиториев, которые возвращают данные.

Репозитории довольно глупы и генерируются при использовании интерфейсов CRUD, и это все. Службы рядом с некоторыми бизнес-логиками c обрабатывают возвращенный ответ из репозиториев, а в случае пустых ответов или любой неверной информации возвращают так называемый ServiceResponse. Этот объект написан на заказ и в основном представляет собой сочетание тела и набора ошибок. Затем этот ServiceResponse затем возвращается на уровень контроллера, где он, в случае успешного ответа, сопоставляется со своим телом или просто представляет ошибку (и).

Лично мне немного некрасиво, что вам нужно поддерживать два разных раздела кода для исключений и для проверок отдельно, поэтому я ищу альтернативные решения. Я думаю, что вы могли бы написать все через JSR-303 или Spring Validators (хотя я бы предпочел Spring Validators здесь), но я предполагаю, что это немного странно для доступа к DB-репозиториям в классах валидаторов. Мое решение объединяет проверки и ошибки, но за это я расплачиваюсь за множество громоздких операторов if внутри классов сервисного уровня.

Теперь перейдем к вопросу: какими будут ваши предложения, и как вы обрабатываете ошибки в вашем приложении?

...