RestAPI + Java+spring. Часть 6 — центральная обработка ошибок

Natalya Khrebtiivsky
3 min readMay 30, 2021

--

В этой статье мы напишем обработку ошибок. Сделаем так, что бы приложение не падало при получении exception

В первой статье мы разобрались что вообще будем делать.
Во второй части создали Spring Boot приложение и подключили к нему maven.
В третьей части мы подключили БД (H2) и создали класс для добавления объекта (Entity)
В четвертой части мы создали классы контроллера и сервиса (используя шаблон Adapter)
В пятой части мы реализовали логику сервиса и репозитория

Теперь пришло время заняться ошибками.

Создаем exception package

Дальше — мы решили, что у нас будет 4 варианта ошибок, которые мы можем отправлять. А именно —
404 — Not Found Exception
409 — Conflict — Not Unique Exceprion
410 — Gone — Not Exists In DB Exception

и плюс к этому — мы будем возвращать 500 код во всех остальных случаях, о которых мы не подумали заранее.

Для того, что бы реализовать обработку ошибок, нам сначала необходимо создать класс для объекта сообщения об ошибке

второй шаг — создание класса ExceptionResponse. Так как класс очень длинный, и в нем нет никакой логики, кроме геттеров и сеттеров — картинки не будет,)

посмотрим только на поля класса.

Дальше начинается уже интересная часть — нужно думать и писать код. Итак — что бы вернуть ошибки — нам необходимы классы тех объектов, которые мы будем возвращать.

в нашем случае класс Not Found Exception уже существует. То есть осталось создать всего 2 класса — NotUniqueException и
Not Exists In DB Exception

И последний шаг — класс, который будет генерировать ошибки

AppExceptionsHandler

Здесь мы создаем методы для обработки как наших кастомных эксепшенов, так и тех, которые нам даны по умолчанию в Java.

Теперь необходимо разместить их в коде.

Первое что мы меняем — это метод createItem в контроллере. Он должен возвращать код 201 вместо 200.

Теперь переходим в сервис и смотрим что там происходит. Сейчас мы просто добавляем объект в БД. Но не проверяем — есть ли такой объект в базе. Исправляем это —

То есть мы проверяем, если такой объект уже есть в БД, то мы не можем его добавлять.

Следующий метод который нужно проверить — это getItemByUuid. Тут обратная ситуация — мы должны получить объект из БД, и если мы его не получим, то должны вернуть exception

getItemsQuantity — если объекта нет, то мы вместо exception можем вернуть просто 0 ->

метод getAllItems — тут ситуация немного другая. Если база данных пуста — то нам вернется просто пустой лист. приложение не упадет при этом, поэтому ошибки тут мы не обрабатываем. Оставим их на обработку фронта.

И наконец метод — deleteItem. Здесь нужно обрабатывать. Мы не можем удалить то, чего нет ->

Все, все наши ошибки обработаны. Осталось протестировать приложение. Что мы и сделаем в следующей статье.

Описанные в этой статье изменения можно посмотреть в ветке https://github.com/natalyaKh/items/tree/exception

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response