Статьи Утилиты Telegram YouTube VK Видео RuTube Отзывы

Удаление записи через DELETE-запрос в Spring Boot

Исходники

9 марта 2026

Тэги: Java, rest, Spring Boot, SQL, руководство.

Содержание

  1. Репозиторий
  2. Сервисный слой
  3. Контроллер

В статье Обновление записи через PUT-запрос в Spring Boot мы научились обновлять данные в БД. Теперь попробуем расширить rest-интерфейс и добавим в него метод для удаления существующих записей.

За основу возьмём наше приложение из предыдущих статей.

Репозиторий

Начнём с доработки репозитория (класс ProfileRepository). Для удаления нам достаточно знать только id записи. Сначала добавим sql-запрос в виде константы:

private static final String SQL_DELETE_PROFILE = "delete from profile where id = :id";

Вот реализация удаления записи в БД:

public void deleteProfileById(int id) {
    jdbcClient.sql(SQL_DELETE_PROFILE)
            .param("id", id)
            .update();
}

Здесь мы сначал передаём sql-запрос в jdbcClient, затем указываем id записи с помощью метода param() и в конце вызываем update().

Сервисный слой

Перейдём к сервисному слою. Добавляем в интерфейс ProfileService новый метод:

void deleteProfile(int id);

Его реализация в ProfileServiceImpl:

@Override
public void deleteProfile(int id) {
    log.info("Delete profile with id={}", id);
    var profile = profileRepository.getProfileById(id)
            .orElseThrow(() -> new ProfileNotFoundException(id));
    profileRepository.deleteProfileById(profile.id());
}

Здесь операцию нужно выполнить над уже существующей записью, поэтому перед вызовом надо проверить её наличие в БД. Если по каким-то причинам её там не нашлось - сразу кидаем исключение, которое будет преобразовано в соответствующий json благодаря ErrorController, который мы рассматривали ранее.

Контроллер

Перейдём к нашему контроллеру ProfileController и добавим в него метод удаления профиля.

Согласно архитектуре restful-сервисов, удаление мы делаем с помощью DELETE-запроса.

@DeleteMapping(value = "/{personId:\\d+}")
public void deleteProfile(@PathVariable int personId) {
    profileService.deleteProfile(personId);
}

Аннотация @DeleteMapping говорит, что это обработчик DELETE-запроса, причём в адресной строке также требуется указать personId (после двоеточия указана регулярка, т.е. мы ожидаем любое количество цифр). Значение этого параметра будет помещено в соответствующую переменную благодаря @PathVariable.

Теперь мы готовы к тому, чтобы выполнить rest-запрос на создание новой записи в БД. Запускаем приложение и отравляем указанный DELETE-запрос по адресу http://127.0.0.1:8080/profiles/1, где 1 - это номер существующей записи. В http-заголовках обязательно указываем Content-Type: application/json.

В ответ в случае успеха получаем http-статус 200. Если же мы укажем id, которой нет в БД, то получим следующий ответ:

{
  "message": "Profile with id = 123 not found"
}

Таким образом, Spring Boot позволяет буквально за 5 минут создать полноценный обработчик DELETE-запроса с валидацией входящих параметров.


См. также

Облако тэгов

Kotlin, Java, Spring, Spring Boot, Spring Data, Spring AI, 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.

Добавить комментарий

×

devmark.ru