Spring boot data rest

Spring boot data rest

In this tutorial, we create a Spring Boot RESTful application with Data JPA.

is a popular Java application framework for creating enterprise applications. is the next step in evolution of Spring framework. It helps create stand-alone, production-grade Spring based applications with minimal effort. It does not use XML configurations anymore and implements the convention over configuration principle.

is an Java open source relational database management. It can run in the client-server mode or it can be embedded in Java applications. H2 is easy to deploy and install and has small footprint.

is part of the umbrella Spring Data project that makes it easier to implement JPA based repositories. Spring Data JPA uses JPA to store data in a relational database. It can create repository implementations automatically, at runtime, from a repository interface.

A RESTFul application follows the REST architectural style, which is used for designing networked applications. RESTful applications generate HTTP requests performing CRUD (Create/Read/Update/Delete) operations on resources. RESTFul applications typically return data in JSON or XML format.

Application

The following application is a Spring Boot RESTful application which returns data in JSON format from an H2 database using Spring Data JPA.

This is the project structure.

This is the Maven build file. The h2 dependency includes the H2 database driver.

Spring Boot starters are a set of convenient dependency descriptors which greatly simplify Maven configuration. The spring-boot-starter-parent has some common configurations for a Spring Boot application. The spring-boot-starter-web is a starter for building web applications with Spring MVC. It uses Tomcat as the default embedded container. The spring-boot-starter-data-jpa is a starter for using Spring Data JPA with Hibernate.

The spring-boot-maven-plugin provides Spring Boot support in Maven, allowing us to package executable JAR or WAR archives. Its spring-boot:run goal runs the Spring Boot application.

In the application.yml file we write various configuration settings of a Spring Boot application. The port sets for server port and the context-path context path (application name). After these settings, we access the application at localhost:8086/rest/ . With the banner-mode property we turn off the Spring banner.

The JPA database value specifies the target database to operate on. We specify the Hibernate dialect, org.hibernate.dialect.H2Dialect in our case. The ddl-auto is the data definition language mode; the create-drop option automatically creates and drops the database schema.

The H2 database is run in memory. Also, we set the logging level for spring framework to ERROR. The application.yml file is located in the in the src/main/resources directory.

This is the City entity. Each entity must have at least two annotations defined: @Entity and @Id . Previously, we have set the ddl-auto option to create-drop which means that Hibernate will create the table schema from this entity.

The @Entity annotation specifies that the class is an entity and is mapped to a database table. The @Table annotation specifies the name of the database table to be used for mapping.

The @Id annotation specifies the primary key of an entity and the @GeneratedValue provides for the specification of generation strategies for the values of primary keys.

The schema is automatically created by Hibernate; later, the import.sql file is executed to fill the table with data.

By extending from the Spring CrudRepository , we will have some methods for our data repository implemented, including findAll() and findOne() . This way we save a lot of boilerplate code.

ICityService provides contract methods to get all cities and get a city by its ID from the data source.

CityService contains the implementation of the findAll() and findById() methods. We use repository to retrieve data from the database.

CityRepository is injected.

The findAll() method of the repository returns the list of cities.

The findOne() method of the repository returns one city object identified by its ID.

This is the controller class for the Spring Boot RESTful application. The @RestController annotation creates a RESTful controller. While the traditional MVC controller uses ModelAndView , the RESTful controller simply returns the object and the object data is written directly to the HTTP response (usually) in JSON or XML format.

Читайте также:  Как разорвать в автокаде

We inject a ICityService into the countryService field.

We map a request with the /cities path to the controller’s findCities() method. The default request is a GET request. The method returns a list of all cities found.

In the second method, we return a specific city. The URL path contains the ID of the city to be retrieved; we use the @PathVariable annotation to bind the URL template variable to the cityId parameter.

We do not need to convert the City domain object to JSON manually. Because Jackson 2 is on the classpath, (included via spring-boot-starter-web, Spring chooses MappingJackson2HttpMessageConverter automatically to convert the City instance to JSON.

The Application sets up the Spring Boot application. The @SpringBootApplication enables auto-configuration and component scanning.

With mvn spring-boot:run command, we run the application. The application is deployed on embedded Tomcat server.

With the curl command, we get all cities.

Here we get one city identified by its ID.

In this tutorial, we have returned data to the client in JSON format from a Spring Boot RESTful application. We used Spring Data JPA to retrieve data from H2 database. You might also be interested in the related tutorials:

Этот урок освещает процесс создания приложения, которое обращается к реляционным JPA данным через гипермедиа RESTful интерфейс.

Что вы создадите

Вы создадите Spring приложение, которое позволяет вам сохранять и получать Person объекты, сохраненные в БД с использованием Spring Data REST. Spring Data REST предоставляет возможности Spring HATEOAS и Spring Data JPA и комбинирует их вместе автоматически.

Что вам потребуется

  • Примерно 15 минут свободного времени
  • Любимый текстовый редактор или IDE
  • JDK 6 и выше
  • Gradle 1.11+ или Maven 3.0+
  • Вы также можете импортировать код этого урока, а также просматривать web-страницы прямо из Spring Tool Suite (STS), собственно как и работать дальше из него.

Как проходить этот урок

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

Чтобы начать с нуля, перейдите в Настройка проекта.

Чтобы пропустить базовые шаги, выполните следующее:

  • Загрузите и распакуйте архив с кодом этого урока, либо кнонируйте из репозитория с помощью Git: git clone https://github.com/spring-guides/gs-accessing-data-rest.git
  • Перейдите в каталог gs-accessing-data-rest/initial
  • Забегая вперед, создайте доменный объект

Когда вы закончите, можете сравнить получившийся результат с образцом в gs-accessing-data-rest/complete .

Настройка проекта

Для начала вам необходимо настроить базовый скрипт сборки. Вы можете использовать любую систему сборки, которая вам нравится для сборки проетов Spring, но в этом уроке рассмотрим код для работы с Gradle и Maven. Если вы не знакомы ни с одним из них, ознакомьтесь с соответсвующими уроками Сборка Java-проекта с использованием Gradle или Сборка Java-проекта с использованием Maven.

Создание структуры каталогов

В выбранном вами каталоге проекта создайте следующую структуру каталогов; к примеру, командой mkdir -p src/main/java/hello для *nix систем:

Создание файла сборки Gradle

Ниже представлен начальный файл сборки Gradle. Файл pom.xml находится здесь. Если вы используете Spring Tool Suite (STS), то можете импортировать урок прямо из него.

Spring Boot gradle plugin предоставляет множество удобных возможностей:

  • Он собирает все jar’ы в classpath и собирает единое, исполняемое "über-jar", что делает более удобным выполнение и доставку вашего сервиса
  • Он ищет public static void main() метод, как признак исполняемого класса
  • Он предоставляет встроенное разрешение зависимостей, с определенными номерами версий для соответсвующих Spring Boot зависимостей. Вы можете переопределить на любые версии, какие захотите, но он будет по умолчанию для Boot выбранным набором версий

Создание доменного объекта

Создайте новый доменный объект для представления человека.

Person имеет имя и фамилию. Также имеется id объекта, настроенный на автоматическую генерацию, поэтому вам не потребуется для этого дополнительных усилий.

Создание Person репозитория

Далее вам необходимо создать простой репозиторий.

Этот репозиторий является интерфейсом и позволяет вам выполнять различные операции с участием Person объектов. Он получает эти операции, наследуя интерфейс PagingAndSortingRepository , определенным в Spring Data Commons.

В процессе выполнения, Spring Data REST будет создавать реализацию этого интерфейса автоматически. Затем он будет использовать аннотацию @RepositoryRestResource , обращаясь к Spring MVC для создания RESTful точки выхода /people .

Читайте также:  Установка windows на gpt без uefi

В вашем интерфейсе вы также описали собственный запрос получения списка Person объектов по заданной фамилии. Чуть позже вы увидите, как его вызвать.

Создание приложения исполняемым

Несмотря на то, что пакет этого сервиса может быть в составе web-приложения и WAR файлов, более простой подход, продемонстрированный ниже создает отдельное самостоятельное приложение. Вы упаковываете все в единый, исполняемый JAR-файл, который запускается через хорошо знакомый старый main() Java-метод. Попутно, вы используете поддержку Spring для встроенного Tomcat контейнера сервлетов как HTTP среду выполнения вместо развертывания на сторонний экземпляр.

Метод main() передает управление вспомогательному классу SpringApplication , предоставляя Application.class как аргумент его run() методу. Это говорит Spring о том, чтобы прочитать аннотацию метаданных из Application и управлять им как компонентом в Spring Application Context.

Аннотация @EnableJpaRepositories активирует Spring Data JPA. Spring Data JPA будет создавать конкретную реализацию для PersonRepository и настраивать на взаимодействие с БД в памяти, используя JPA.

Spring Data REST является Spring MVC приложением. Аннотация @Import(RepositoryRestMvcConfiguration.class) импортирует коллекцию Spring MVC контроллеров, JSON конвертеров и других бинов, необходимых для обеспечения RESTful интерфейса. Эти компоненты связаны с Spring Data JPA backend.

@EnableAutoConfiguration аннотация переключает на доступные по умолчанию настройки, основанные на содержимом вашего classpath. К примеру, т.к. приложение зависит от встраиваемой версии Tomcat(tomcat-embed-core.jar), то Tomcat сервер установлен и настроен по умолчанию от вашего имени. И также, т.к. приложение зависит от Spring MVC (spring-webmvc.jar), Spring MVC DispatcherServlet настроен и зарегистрирован за вас — web.xml не нужен! Поэтому здесь MultipartConfigElement , он настроен DispatcherServlet с функциональностью загрузки файлов. Автонастройка является мощным и гибким механизмом. Более подробно вы можете ознакомиться в API документации.

Сборка исполняемого JAR

Вы можете собрать единый исполняемый JAR-файл, который содержит все необходимые зависимости, классы и ресурсы. Это делает его легким в загрузке, версионировании и развертывании сервиса как приложения на протяжении всего периода разработки, на различных средах и так далее.

Затем вы можете запустить JAR-файл:

Если вы используете Maven, вы можете запустить приложение, используя mvn spring-boot:run , либо вы можете собрать приложение с mvn clean package и запустить JAR примерно так:

Если вы используете Gradle, вы можете запустить ваш сервис из командной строки:

Как вариант, вы можете запустить ваш сервис напрямую из Gradle примерно так:

Данные по логгированию отображаются. Сервис должен быть поднят и запущен через несколько секунд.

Тестирование приложения

Теперь, когда приложение запущено, вы можете протестировать его. Вы можете использовать любой REST клиент, какой захотите. Пример, показанный ниже, использует *nix инструмент curl .

Сначала посмотрим на сервис верхнего уровня:

Здесь вы получите первое представление о том, что сервер может предложить. Ссылка на people указывает на http://localhost:8080/people. Она включает несколько вариантов, таких как ?page , ?size и ?sort .

Есть также и без элементов, соответственно и без страниц. Время создавать нового Person !

  • -i гарантирует вам отображение сообщения ответа, включая заголовки. URI новосозданного Person показан
  • -X POST указывает на использование POST для создания новой записи
  • -H "Content-Type:application/json" устанавливает тип содержимого, поэтому приложение знает о содержании JSON объекта
  • -d ‘< "firstName" : "Frodo", "lastName" : "Baggins" >’ отправляемые данные

Вы можете снова запросить всех людей:

Объект persons содержит список с Frodo. Обратите внимание, как он включает в себя ссылку self. Spring Data REST также использует Evo Inflector для использования имени в группировках.

Вы можете запросить напрямую конкретную запись:

В этом уроке рассматривается только один доменный объект. В более сложной системе, где доменные объекты связаны друг с другом, Spring Data REST отображает дополнительные ссылки, помогая переходить к связанным записям.

Нахождение всех ппользовательских запросов:

Вы можете увидеть URL для запроса, включающего параметр HTTP запроса name . Если обратите внимание, то он соответствует аннотации @Param("name") , встроенной в интерфейс.

Чтобы использовать запрос findByLastName , сделайте следующее:

Т.к. вы описали возвращать List

в коде, то он вернет все результаты. Если бы вы описали возвращать только Person , то он бы выбрал и вернул один их Person объектов. Поскольку это может быть непредсказуемым, вы скорее всего не захотите это делать для запросов, возвращающих несколько записей.

Вы можете также использовать PUT, PATCH или DELETE REST вызовы для замены, обновления или удаления существующих записей:

Вы можете удалить записи:

Очень удобной стороной этого Hypermedia-driven Interface является то, как вы можете обнаруживать все RESTful точки выхода, используя curl(либо любой другой REST клиент). При этом нет необходимости в обмене официальным договором или документом интерфейса с вашими клиентами.

Читайте также:  Впр функция excel расшифровка

Поздравляем! Вы только что написали простое приложение с гипермедиа RESTful интерфейсом на клиенте и JPA на сервере.

Last modified: January 18, 2020

I just announced the new Learn Spring course, focused on the fundamentals of Spring 5 and Spring Boot 2:

1. Overview

This article will explain the basics of Spring Data REST and show how to use it to build a simple REST API.

In general, Spring Data REST is built on top of the Spring Data project and makes it easy to build hypermedia-driven REST web services that connect to Spring Data repositories – all using HAL as the driving hypermedia type.

It takes away a lot of the manual work usually associated with such tasks and makes implementing basic CRUD functionality for web applications quite simple.

2. Maven Dependencies

The following Maven dependencies are required for our simple application:

We decided to use Spring Boot for this example, but classic Spring will also work fine. We also chose to use the H2 embedded database in order to avoid any extra setup, but the example can be applied to any database.

3. Writing the Application

We will start by writing a domain object to represent a user of our website:

Every user has a name and an email, as well as an automatically-generated id. Now we can write a simple repository:

This is an interface that allows you to perform various operations with WebsiteUser objects. We also defined a custom query that will provide a list of users based on a given name.

The @RepositoryRestResource annotation is optional and is used to customize the REST endpoint. If we decided to omit it, Spring would automatically create an endpoint at “/websiteUsers” instead of “/users“.

Finally, we will write a standard Spring Boot main class to initialize the application:

That’s it! We now have a fully-functional REST API. Let’s take a look at it in action.

4. Accessing the REST API

If we run the application and go to http://localhost:8080/ in a browser, we will receive the following JSON:

As you can see, there is a “/users” endpoint available, and it already has the “?page“, “?size” and “?sort” options.

There is also a standard “/profile” endpoint, which provides application metadata. It is important to note that the response is structured in a way that follows the constraints of the REST architecture style. Specifically, it provides a uniform interface and self-descriptive messages. This means that each message contains enough information to describe how to process the message.

There are no users in our application yet, so going to http://localhost:8080/users would just show an empty list of users. Let’s use curl to add a user.

Lets take a look at the response headers as well:

You will notice that the returned content type is “application/hal+json“. HAL is a simple format that gives a consistent and easy way to hyperlink between resources in your API. The header also automatically contains the Location header, which is the address we can use to access the newly created user.

We can now access this user at http://localhost:8080/users/1

You can also use curl or any other REST client to issue PUT, PATCH, and DELETE requests. It also is important to note that Spring Data REST automatically follows the principles of HATEOAS. HATEOAS is one of the constraints of the REST architecture style, and it means that hypertext should be used to find your way through the API.

Finally, lets try to access the custom query that we wrote earlier and find all users with the name “test”. This is done by going to http://localhost:8080/users/search/findByName?name=test

5. Conclusion

This tutorial demonstrated the basics of creating a simple REST API with Spring Data REST. The example used in this article can be found in the linked GitHub project.

Ссылка на основную публикацию
Logitech deluxe 250 keyboard драйвер
Ниже показаны совместимые с ОС Windows 7 драйвера для Logitech Deluxe 250 USB Keyboard. Каждый драйвер клавиатуры Logitech Deluxe 250...
Adblock detector