Давайте создадим приложение Java Full-Stack Spring boot & React: Backend REST API / 2

Здравствуйте! В предыдущем уроке мы настроили проект 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;
  }

}

Такой простой класс.

@Организация аннотация должна сообщить базе данных, что этот класс будет сущностью, тогда как @Стол используется для присвоения пользовательского имени соответствующей таблице в БД. Вы можете посетить этот блог для получения дополнительной информации об этих двух аннотациях. Мы добавляем ограничение @Столбец(unique = true), чтобы избежать дублирования имен.

Далее мы собираемся создать репозиторий, поэтому создайте пакет с именем: хранилище в котором вы создаете класс: 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<Route, Long> { Optional<Route> findRoutesByName(@Param("name") String name);
}
  • Мы используем @RepositoryRestResource вместо @Репозиторий потому что он напрямую предоставляет интерфейс репозитория как конечную точку REST, поэтому нет необходимости в другом контроллере REST, как в нашем случае.

Теперь наш серверный REST API готов! Давайте проверим это с помощью Postman.

  1. Запустите основной класс (EasytransApiApplication.java в нашем случае)
  2. Добрался до почтальона и сделал запрос http GET по этому URL-адресу: локальный хост: 9000/маршруты

изображение.png

В результате вы заметите, что маршруты массив пуст, это правильно, потому что у нас нет сохраненных записей; также Spring Data Rest сгенерировал полезные ссылки через объект «_links». Позже мы будем использовать «локальный: 9000/маршруты/поиск» для разных поисковых запросов

3 . Снова в почтальоне, давайте сделаем запрос POST Http по этому URL-адресу:локальный хост: 9000/маршрутыНа вкладке Body выберите raw и JSON, а затем вставьте тело ниже:

{ 
  "name": "Rex-Adetikope", 
    "start": "Grand marche - Rex", 
    "terminus": "Adetikope"
}

Нажмите Отправлять для сохранения данных.

изображение.png

4 . Давайте попробуем наш предыдущий запрос GET: локальный хост: 9000/маршрутыТеперь массив маршрутов содержит постоянные данные.

изображение.png

5 . Теперь, когда наш REST API позволяет нам составлять список маршрутов и сохранять некоторые объекты маршрута, давайте сделаем поисковые запросы.

  • Найдите конкретный маршрут, указав его имя в запросе GET:

  • Обратите внимание, что после URL-адреса поиска, предоставленного Spring Data Rest, мы добавляем подпись метода запроса (найтиRoutesByName), за которым следует атрибут, указанный в @Парамкоторый здесь имя.

изображение.png

Настройка URL-адреса поиска

Вместо использования найтиRoutesByName в URL-адресе поиска давайте использовать более короткое имя: маршруты по имени .

Для этого перейдите в интерфейс репозитория и добавьте аннотацию @RestResource(путь = «routesByName»)наш интерфейс должен выглядеть так:

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<Route, Long> { 
@RestResource(path = "routesByName") Optional<Route> findRoutesByName(@Param("name") String name);
}

Сохраните и сделайте запрос GET для этого URL:


изображение.pngКак видите, мы получили ожидаемый результат, используя маршруты по имени вместо найтиRoutesByName.

Настройка базового пути

В реальном проекте большинство корневых путей REST API начинаются с domain/api/path-to-resources, но, как вы видите, мы напрямую вызываем path-to-resources после имени домена.

Чтобы добавить /api перед любым путем к ресурсу, откройте файл application.yml и добавьте ключ базового пути Spring и его значение, подобное этому:

spring: 
  data: 
    rest: 
      base-path: /api

Сохраните файл yml, попробуйте выполнить один из предыдущих запросов GET, вы увидите ошибку 404, ресурс не найден.

изображение.png

Это связано с тем, что теперь наш REST API будет использоваться с использованием базового пути /api/ до любого другого пути к ресурсам. Так:локальный хост: 9000/маршруты -> локальный хост: 9000/API/маршруты и т.п.

Вот! Поздравляем, вы создали базовый REST API Java Spring Boot, надеюсь, вы узнали что-то новое. Если это так, не забудьте нажать кнопку «Нравится» и подписаться на этот блог, чтобы получать уведомления о новых сообщениях.

В следующей статье мы добавим новые функции в наше приложение EasyTrans. Благодарим вас за участие в этом пути разработчика fullStack Java и React!

Похожие записи

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *