Автор оригинала: Koffi KOMLAN.
Здравствуйте, В предыдущем уроке мы создали проект Easytrans. В этом мы углубимся в api REST.
Мы научимся, как:
- Создание сущности
- Создайте репозиторий и предоставьте его в качестве конечных точек REST без использования какого-либо другого компонента контроллера
- Создание запросов
- URL-адрес пользовательского запроса
- Пользовательский базовый путь REST API
Создание сущности и репозитория
Создайте пакет с именем: модель и создайте класс: Маршрут.java , как показано ниже:
package com.codeurinfo.easytransapi.model; import java.util.Objects; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; public class Route { private Long id; private String name; private String start; private String terminus; public Route() {} public Route(String name, String start, String terminus) { this.name = name; this.start = start; this.terminus = terminus; } }
Такой простой урок, как этот.
@Entity аннотация должна сообщить базе данных, что этот класс будет сущностью, тогда как @Table используется для указания пользовательского имени соответствующей таблицы в БД. Вы можете посетить этот блог для получения дополнительной информации об этих двух аннотациях. Мы добавляем ограничение @Столбец (уникальный), чтобы избежать дублирования имен.
Далее мы собираемся создать репозиторий, поэтому создайте пакет с именем: репозиторий , в котором вы создадите класс: RouteRepository.java :
package com.codeurinfo.easytransapi.repository; import com.codeurinfo.easytransapi.model.Route; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.query.Param; import org.springframework.data.rest.core.annotation.RepositoryRestResource; @RepositoryRestResource public interface RouteRepository extends JpaRepository{ Optional findRoutesByName(@Param("name") String name); }
- Мы используем @RepositoryRestResource вместо @Repository , потому что он напрямую предоставляет интерфейс репозитория в качестве конечной точки REST, поэтому не было бы необходимости в другом контроллере REST, как в нашем случае.
Теперь наш серверный REST API готов! Давайте проверим это с помощью Почтальона.
- Запустите основной класс ( EasytransApiApplication.java в нашем случае)
- Добрался до почтальона и сделал запрос http GET по этому URL: локальный хост:9000/маршруты
В результате вы заметите, что массив routes пуст, это верно, потому что у нас нет сохраненных записей; кроме того, Spring Data Rest генерирует полезные ссылки через объект “_links”. Позже мы будем использовать ” localhost:9000/маршруты/поиск ” для различные поисковые запросы
3 . В почтальоне снова давайте сделаем запрос Http POST по этому URL: localhost:9000/маршруты На вкладке “Тело” выберите raw и JSON, затем пройдите мимо тела ниже:
{ "name": "Rex-Adetikope", "start": "Grand marche - Rex", "terminus": "Adetikope" }
Нажмите Отправить , чтобы сохранить данные.
4 . Давайте попробуем наш предыдущий запрос GET против: localhost:9000/маршруты Теперь массив маршрутов содержит сохраненные данные.
5 . Теперь, когда наш REST API позволяет нам перечислять маршруты и сохранять некоторые объекты маршрута, давайте сделаем поисковые запросы.
- Найдите конкретный маршрут, указав его название в запросе GET:
http://localhost:9000/routes/search/findRoutesByName?name=Rex-Adetikope
- Обратите внимание, что после URL-адреса поиска, предоставленного Spring Data Rest , мы добавляем подпись метода запроса ( поиск маршрутов по имени ), за которой следует атрибут, указанный в @Param , который здесь имя .
Настройка URL-адреса поиска
Вместо использования найти маршруты по имени в URL-адресе поиска давайте использовать более короткое имя: маршруты по имени .
Для этого перейдите в интерфейс репозитория и добавьте аннотацию @RestResource (путь) , наш интерфейс должен выглядеть так:
package com.codeurinfo.easytransapi.repository; import com.codeurinfo.easytransapi.model.Route; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.query.Param; import org.springframework.data.rest.core.annotation.RepositoryRestResource; import org.springframework.data.rest.core.annotation.RestResource; @RepositoryRestResource public interface RouteRepository extends JpaRepository{ @RestResource(path = "routesByName") Optional findRoutesByName(@Param("name") String name); }
Сохраните и сделайте запрос GET по этому URL-адресу:
http://localhost:9000/routes/search/routesByName?name=Rex-Adetikope
Как вы можете видеть, мы получили ожидаемый результат, используя маршруты По Названию вместо найдите маршруты по Названию
Настройка базового пути
В реальном проекте большинство корневых путей REST API начинаются с домена/api/путь к ресурсам, но, как вы можете видеть, мы напрямую называем путь к ресурсам после имени домена.
Чтобы добавить/api перед любым путем к ресурсу, откройте приложение.файл yml и добавьте ключ базового пути spring, и его значение будет таким:
spring: data: rest: base-path: /api
Сохраните файл yml, попробуйте выполнить один из предыдущих запросов GET, вы заметите ошибку 404 “ресурс не найден”.
Это потому, что с этого момента наш REST API будет использоваться с использованием базового пути/api/перед любым другим ресурсным путем. Итак: локальный хост:9000/маршруты -> локальный хост:9000/api/маршруты и т.д.
Вот так ! Поздравляем, вы создали базовый Java Spring Boot REST API, надеюсь, вы узнали что-то новое. Если это так, не забудьте нажать кнопку “Мне нравится” и подписаться на этот блог, чтобы получать уведомления о новых публикациях.
В следующей статье мы добавим новые функции в наше приложение Easy Trans. Спасибо вам за участие в этом путешествии разработчика Java и React с полным стеком!
Оригинал: “https://www.codementor.io/@koffikomlan/let-s-build-java-full-stack-spring-boot-react-app-backend-rest-api-2-1k43mx2wzs”