Статьи Утилиты Telegram YouTube RuTube Отзывы

Статьи с тэгом «rest»

Работа с событиями в Spring

10 февраля 2025

Тэги: Spring Boot, rest, Kotlin, YouTube, Spring.

Spring «из коробки» предоставляет простой механизм работы с событиями, которые позволяют уменьшить связность компонентов системы. Событие, которое возникает в одной точке приложения, может быть перехвачено и обработано в любой другой части приложения благодаря таким сущностям как publisher и eventListener.

Для примера рассмотрим rest-приложение на Kotlin, в котором есть метод создания некоторого объекта. И мы хотим фиксировать каждое создание объекта в системе. Чтобы не повышать связность кода и не делать явный вызов конкретного компонента, мы можем публиковать событие в нашей системе и любые компоненты, которые будут «прослушивать» тип такого события, смогут выполнить дополнительные действия.

Читать полностью...

Spring Data Rest

2 февраля 2025

Тэги: Hibernate, Spring, Spring Boot, rest, SQL, gradle, Spring Data, Kotlin, json, yaml, YouTube, руководство, H2.

Ранее я уже приводил пример в статье CrudRepository на Kotlin, как Spring Data позволяет легко выполнять основные операции над сущностями в БД. Теперь пойдём ещё дальше и рассмотрим как Spring Data Rest позволяет избежать написания контроллеров и сервисной логики. Поскольку писать будем на Kotlin, нам придётся учитывать специфику взаимодействия с Java-кодом, на который изначально был рассчитан Spring Data Rest.

В качестве примера напишем приложение, которое позволяет просматривать и редактировать список музыкальных групп.

Исходники тестового проекта, адаптированного под Spring Boot 3, доступны на github.

Подключаем Spring Data Rest

Для начала создадим заготовку проекта. Проще всего это сделать с помощью Spring Initializr. В настройках выбираем в качестве языка Kotlin и в качестве сборщика Gradle – Kotlin. В dependency нам нужно последовательно добавить три зависимости: Spring Data JPA, Rest Repositories и H2 Database. H2 – это СУБД, которая работает в оперативной памяти и не требует установки. Однако при необходимости вы можете легко поменять настройки подключения и использовать другой драйвер, например, Postgres. При этом как-то править код приложения не потребуется.

Читать полностью...

Валидация бинов в Spring

23 января 2025

Тэги: Java, Spring, json, maven, rest.

Spring позволяет проверять входящие запросы в декларативном стиле при помощи специальных аннотаций из пакета jakarta.validation.

Создадим простой проект на Java и добавим в pom.xml следующие зависимости:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Компонент spring-boot-starter-web добавляет базовый функционал по работе с rest-контроллерами, а spring-boot-starter-validation – сам механизм валидации.

Теперь создадим rest-контроллер для работы с пользователями. В нём есть метод, создающий нового пользователя. Согласно restful-соглашениям, это будет POST-запрос:

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public String createUser(@Valid @RequestBody CreateUserRequest request) {
        // создание пользователя в БД
        return "Пользователь создан успешно!";
    }
}

На вход метод принимает CreateUserRequest, который мы будем передавать в формате json. Этот параметр метода снабжён аннотациями @RequestBody (говорит, что параметры будут именно в теле запроса) и @Valid (аннотация, которая активирует механизм валидации для данного бина). Если не указать аннотацию @Valid, то валидация работать не будет!

Читать полностью...

Springdoc для документации REST API

20 января 2025

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

Ранее я уже публиковал статью про создание документации по REST API с помощью swagger. К сожалению, с последними версиями Spring Boot описанный там подход уже не работает, т.к. на смену springfox-swagger пришёл springdoc. По функционалу springdoc предоставляет всё то же самое, но аннотации для разметки классов и методов нужно использовать другие. Поэтому в данной статье подробно рассмотрим пример документирования REST API с помощью springdoc и его отличия от springfox.

Springdoc – это библиотека для проекта на Spring Boot, которая автоматически будет генерировать документацию по вашему REST API на основании исходного кода и специальных аннотаций. Таким образом, ваша документация будет всегда актуальной и её не нужно как-то дополнительно актуализировать каждый раз при изменении исходников.

Читать полностью...

Локализация текста в Spring Boot

10 декабря 2024

Тэги: файлы, Spring Boot, руководство, Kotlin, rest, gradle.

При разработке приложения, ориентированного на мировой рынок, сразу следует закладывать поддержку нескольких языков. Добавление новой локализации должно выполняться быстро и при этом не требовать значительного рефакторинга. К счастью, если вы разрабатываете приложение на Spring Boot, то реализовать такую поддержку довольно просто.

Читать полностью...

CrudRepository на Kotlin

20 ноября 2024

Тэги: Spring Data, SQL, Kotlin, rest, gradle, json, Hibernate, H2.

Рассмотрим пример rest-сервиса, написанного на Kotlin и работающего с базой данных с помощью Spring Data JPA. Rest-сервис состоит из трёх слоёв: слой работы с БД, сервисный слой и контроллер. Мы пойдём последовательно по слоям, начиная с нижнего.

В качестве примера возьмём сервис, работающий с музыкальными группами. У каждой группы будет три основных параметра: название, количество участников и дата основания.

Заготовку проекта удобно сгенерить через Spring Initializr. Там достаточно выбрать тип проекта – Gradle – Kotlin, язык – Kotlin. В качестве dependency надо добавить Spring Web (функциональность rest-контроллеров), Spring Data JPA (работа с БД), Validation (валидация входящих rest-запросов) и драйвер вашей СУБД. Для удобства мы будем использовать H2, т.к. она автоматически создаётся в оперативной памяти и не требует никакой настройки. Но вы можете использовать любую другую СУБД. Достаточно подключить нужный драйвер в файле build.gradle.kts и прописать параметры подключения в файле application.yml.

Затем нажимаем Generate – и скачиваем архив с заготовкой проекта. В итоге файл build.gradle.kts в секции dependencies помимо стандартных должен содержать следующие зависимости:

Читать полностью...

Кеширование в Spring Boot

19 ноября 2024

Тэги: Spring Boot, maven, Java, rest.

Spring Boot поддерживает простой механизм кеширования данных. Рассмотрим его на примере, исходники которого доступны на github.

Подключение зависимостей

Создадим стандартное приложение Spring Boot. Это удобно делать через Spring Initializr.

Добавим в pom.xml две зависимости:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Зависимость spring-boot-starter-web – это базовая функциональность нашего веб-приложения, в том числе поддержка rest-контроллеров. Зависимость spring-boot-starter-cache добавляет возможность кеширования.

Читать полностью...

Аудит изменений в Spring Data JPA

16 ноября 2024

Тэги: SQL, gradle, rest, Kotlin, Spring Data.

В промышленных системах бывает важно знать, кто и когда сделал изменения конкретной сущности. Прежде всего нас интересует такая информация:

  • кто создал запись
  • дата создания
  • автор последних изменений
  • дата последних изменений

Структура таблицы

Рассмотрим пример, в котором у нас есть таблица company. У компании есть id (автоинкремент) и название.

Поля аудита обычно скрыты от рядовых пользователей, но доступны администраторам системы. Скрипт создания этой таблицы может выглядеть так:

Читать полностью...

Конфигурационные файлы в Spring Boot

28 декабря 2023

Тэги: Spring Boot, rest, Java, yaml, файлы.

Значения параметров системы удобно отделять от программного кода, чтобы можно было их менять без перекомпиляции всего приложения. Spring Boot предоставляет нам удобный способ работы с конфигурационными файлами. Ниже мы рассмотрим несколько случаев, начиная с самого простого.

Одиночные параметры

Отдельное свойство можно внедрить в любой компонент Spring при помощи аннотации @Value.

Предположим, у нас есть простейшее Spring Boot приложение, в котором есть rest-контроллер с методами.

Добавим метод, который в ответ возвращает приветственный текст для пользователя, а имя пользователя будем брать из конфига.

Читать полностью...

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

28 декабря 2023

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

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

За основу возьмём наше приложение из указанной статьи. Оно состоит из трёх слоёв: репозиторий (работа с БД), бизнес-логика приложения (service) и сам rest-интерфейс (controller), который обрабатывает входящий json и генерирует исходящий.

Репозиторий

Начнём с доработки репозитория (интерфейс ProfileRepository).

void deleteProfileById(int id);

Для удаления нам достаточно знать только id записи.

В реализацию интерфейса репозитория (ProfileRepositoryImpl) добавим sql-запрос в виде константы, которую принято размещать в начале класса:

private static final String SQL_DELETE_PROFILE = "delete from profile where id = :id";
Читать полностью...

Далее ❯