1. Введение
Добро пожаловать в гостиТыквенный медленный разговор www.pkslow.comПолучайте больше отличных статей!
Springboot + Spring MVCсильно упрощенныйWebПрименяемыйRESTfulразвитие, при этомSpring Data RESTпроще.Spring Data RESTУстановленоData Repositoryвыше, он может прямо поставитьresositoryкHATEOASстиль выставленWebобслуживание без рукописного вводаControllerЭтаж.
HATEOAS,СейчасHypermedia as the Engine of Application State, это более взрослоеRESTМодель содержит информацию о ссылке в представлении ресурса, и клиент может обнаружить исполняемые действия по ссылке.
Spring Data RESTслужба поддержкиSpring Data JPA,Spring Data MongoDB,Spring Data Neo4j,Spring Data GenFire,Spring Data Cassandra, здесь выберите тот, который вам больше знакомJPA.
2 Приведите пример
Давайте прочувствуем это на примере.
2.1 Создать проект
мы проходимSpring Initializrбыстро создатьSpringbootпроект. Выбраны следующие зависимые компоненты:

- (1)
Spring Web:поставкаWebСлужить; - (2)
Rest Repositories:поставкаSpring Data RESTслужба поддержки; - (3)
Spring Data JPA:пройти черезJPAпоставкаRepositoryсредства доступа к данным; - (4)
H2 Database:H2База данных, которая используется для удобства и краткости.
После импорта соответствующегоpom.xmlЗависимости следующие:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
2.2 Класс сущности
Создайте класс сущностейUser,Следующее:
package com.pkslow.rest.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
private Integer age;
private String email;
//getter & setter
}
2.3 Определение интерфейса репозитория
определениеRepositoryИнтерфейс используется для управления базой данных следующим образом:
package com.pkslow.rest.repo;
import com.pkslow.rest.entity.User;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource(path = "user")
public interface UserRepository extends CrudRepository<User, Integer> {
}
аннотацияRepositoryRestResourceдаData RESTдля экспозицииRepository,pathпуть доступа, установленный вuser, адрес доступаhttp://localhost:8080/user.
2.4 Инициировать доступ
Подготовьте приведенный выше код и начните напрямуюSpringbootПриложение может быть, мы устанавливаем порт на8080, доступ к которому осуществляется следующим образом:

мы используемPostmanВыполните базовую операцию.
Добавлен:

Спросите:

по первичному ключуIDСпросите:

Исправлять:

Удалить:

Не трудно найти, возвращениеJsonВсе со ссылками, этоHATEOASстиль.
3 Еще для изучения
3.1 Функции пейджинга и сортировки
Вы можете быстро реализовать функции разбиения на страницы и сортировки, просто поставивRepositoryРодительский интерфейс изменен наPagingAndSortingRepositoryВот так, следующим образом:
@RepositoryRestResource(path = "user")
public interface UserRepository extends PagingAndSortingRepository<User, Integer> {
}
На самом деле есть еще два методаfindAll(Sort var1)а такжеfindAll(Pageable var1),Следующее:
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort var1);
Page<T> findAll(Pageable var1);
}
Запросhttp://localhost:8080/user?page=1&size=2&sort=id,desc, что означает запрашивать вторую страницу, 2 записи на страницу, сIDОтображение в обратном порядке. следующее:
{
"_embedded": {
"users": [
{
"name": "pkslow.com",
"age": 18,
"email": "pkslow@pkslow.com",
"_links": {
"self": {
"href": "http://localhost:8080/user/33"
},
"user": {
"href": "http://localhost:8080/user/33"
}
}
},
{
"name": "pkslow.com",
"age": 18,
"email": "pkslow@pkslow.com",
"_links": {
"self": {
"href": "http://localhost:8080/user/32"
},
"user": {
"href": "http://localhost:8080/user/32"
}
}
}
]
},
"_links": {
"first": {
"href": "http://localhost:8080/user?page=0&size=2&sort=id,desc"
},
"prev": {
"href": "http://localhost:8080/user?page=0&size=2&sort=id,desc"
},
"self": {
"href": "http://localhost:8080/user?page=1&size=2&sort=id,desc"
},
"next": {
"href": "http://localhost:8080/user?page=2&size=2&sort=id,desc"
},
"last": {
"href": "http://localhost:8080/user?page=17&size=2&sort=id,desc"
},
"profile": {
"href": "http://localhost:8080/profile/user"
}
},
"page": {
"size": 2,
"totalElements": 35,
"totalPages": 18,
"number": 1
}
}
Его можно найтиpageОт0начал,1Указывает вторую страницу; возвращаемый результат также содержит ссылки на первую страницу, предыдущую страницу, эту страницу, следующую страницу и последнюю страницу, а также информацию о разбиении на страницы.
3.2 Мониторинг событий
RESTОбеспечивает 8 на основеRepositoryсобытия следующим образом:
BeforeCreateEventAfterCreateEventBeforeSaveEventAfterSaveEventBeforeLinkSaveEventAfterLinkSaveEventBeforeDeleteEventAfterDeleteEvent
Добавьте пользовательское событие следующим образом:
package com.pkslow.rest.event;
import com.pkslow.rest.entity.User;
import org.springframework.data.rest.core.event.AbstractRepositoryEventListener;
import org.springframework.stereotype.Component;
@Component
public class PkslowEventListener extends AbstractRepositoryEventListener<User> {
@Override
public void onBeforeCreate(User entity) {
System.out.println("pkslow creating:" + entity);
}
@Override
public void onBeforeSave(User entity) {
System.out.println("pkslow saving:" + entity);
}
@Override
public void onAfterDelete(User entity) {
System.out.println("pkslow deleted:" + entity);
}
}
После добавления, изменения и удаления соответственно журнал выглядит следующим образом:
pkslow creating:User{id=null, name='pkslow.com', age=18, email='pkslow@pkslow.com'}
pkslow saving:User{id=32, name='pkslow.com', age=20, email='pkslow@pkslow.com'}
pkslow deleted:User{id=14, name='pkslow.com', age=18, email='pkslow@pkslow.com'}
Это указывает на то, что событие было успешно выполнено.В сочетании с этой функцией можно реализовать много бизнес-логики, например, запись журнала операций после удаления и удаление других связанных данных.
3.3 Путь
Базовый путь по умолчанию/, в состоянии пройтиspring.data.rest.base-path=apiнастройте его так, чтобы он сталlocalhost:8080/api/user.
4 Интегрированный вид браузера HAL
HAL Browserэто специальный браузерныйJSON Hypertext Application Languageфронтальные инструменты. Мы уже предоставилиHATEOASСтильRESTfulСлужить,HAL Browserможно легко просмотреть.
Добавьте зависимости:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-browser</artifactId>
<version>3.3.2.RELEASE</version>
</dependency>
доступ после запускаhttp://localhost:8080/browser/index.html#/следующее:

можно продолжитьCRUDОперация не показана подробно по одной.
5 Резюме
В этой статье описываетсяSpring Data REST, удобно всемRESTfulразвитие сервиса. Но понятно, что он мало используется в проекте, просто выучить это своего рода понимание.SpringПуть всей семьи ведра и идеи архитектуры.
Подробный код этой статьи можно найти наТыква медленный разговорОтвет публичного аккаунтаSpringDataRest> Получить.
Добро пожаловать в публичный аккаунт WeChatТыква медленный разговор>, буду обновлять для вас...

Читайте больше, делитесь больше, пишите больше, организуйте больше.