28 декабря 2023
Тэги: Java, rest, Spring Boot, SQL, руководство.
В статье Обновление записи через PUT-запрос в Spring Boot мы научились обновлять данные в БД. Теперь попробуем создать полноценный rest-интерфейс для удаления существующих записей.
За основу возьмём наше приложение из указанной статьи. Оно состоит из трёх слоёв: репозиторий (работа с БД), бизнес-логика приложения (service) и сам rest-интерфейс (controller), который обрабатывает входящий json и генерирует исходящий.
Начнём с доработки репозитория (интерфейс ProfileRepository).
Для удаления нам достаточно знать только id записи.
В реализацию интерфейса репозитория (ProfileRepositoryImpl) добавим sql-запрос в виде константы, которую принято размещать в начале класса:
Имена параметров, которые мы будем подставлять в sql-запрос, начинаются с двоеточия.
Вот реализация удаления записи в БД:
Всё предельно просто: передаём наш единственный параметр вместе с запросом в метод jdbcTemplate.update(), который вопреки своему названию отвечает вообще за любые изменения данных (и insert, и update, и delete). Обратите внимание, что jdbcTemplate у нас имеет тип NamedParameterJdbcTemplate – именно он позволяет использовать именованные параметры. Иначе пришлось бы писать знаки вопроса.
Перейдём к сервисному слою. Интерфейс ProfileService не отличается оригинальностью:
Его реализация в ProfileServiceImpl:
Здесь операцию нужно выполнить над уже существующей записью, поэтому перед вызовом надо проверить её наличие в БД. Если по каким-то причинам её там не нашлось – сразу кидаем исключение, которое будет преобразовано в соответствующий json благодаря ErrorController, который мы рассматривали в предыдущей статье.
Согласно архитектуре restful-сервисов, чтение данных мы делаем при помощи GET-запросов, а удаление – при помощи DELETE.
Перейдём к нашему контроллеру ProfileController и добавим в него метод удаления профиля.
Аннотация @DeleteMapping говорит, что это обработчик DELETE-запроса, причём в адресной строке также требуется указать personId (после двоеточия указана регулярка, т.е. мы ожидаем любое количество цифр). Значение этого параметра будет помещено в соответствующую переменную благодаря @PathVariable.
Теперь мы готовы к тому, чтобы выполнить rest-запрос на создание новой записи в БД. Запускаем приложение и отравляем указанный DELETE-запрос по адресу http://127.0.0.1:8080/profiles/1, где 1 – это номер существующей записи. В http-заголовках обязательно указываем Content-Type: application/json.
В ответ в случае успеха получаем http-статус 200. Если же мы укажем id, которой нет в БД, то получим следующий ответ:
Таким образом, Spring Boot позволяет буквально за 5 минут создать полноценный обработчик DELETE-запроса с валидацией входящих параметров.
Kotlin, Java, Spring, Spring Boot, Spring Data, SQL, PostgreSQL, Oracle, H2, Linux, Hibernate, Collections, Stream API, многопоточность, чат-боты, нейросети, файлы, devops, Docker, Nginx, Apache, maven, gradle, JUnit, YouTube, новости, руководство, ООП, алгоритмы, головоломки, rest, GraphQL, Excel, XML, json, yaml.
05.09.2023 14:59 Иван
Здравствуйте. Скажите как отравить указанный DELETE-запрос по адресу http://127.0.0.1:8080/profiles/1, где 1 – это номер существующей записи. В http-заголовках обязательно указываем Content-Type: application/json ?
Отличная серия статей, мне очень помогла.
Было бы здорово, если вы продолжили развивать эту тему и показали как доработать приложение, чтобы уже в браузере мы видели не json ответ, а таблицу sql с возможностями CRUD.
05.09.2023 23:55 devmark
Любой тип запроса (GET, POST, PUT, DELETE, PATCH и т.п.) можно отправить через Postman. Можете попробовать отправить без заголовока Content-Type.
"sql с возможностями CRUD" - вы имеете в виду веб-интерфейс в виде таблицы, где можно оперировать данными?
06.09.2023 08:40 Иван
Спасибо. Да, веб-интерфейс с возможностью оперировать данными. У вас ещё есть статьи где-нибудь, помимо youtube?
06.09.2023 23:48 devmark
Нет, на youtube у меня видео, на github примеры проектов, а статьи - на этом сайте. Ещё есть канал и бот Telegram.