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, Linux, Hibernate, Collections, Stream API, многопоточность, файлы, 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.