Это руководство содержит пошаговое руководство по созданию полноценного веб-сервиса с использованием Spring Boot .
Предпосылки:
- Eclipse IDE (неоновый выпуск)
- Maven 4
- Java 1.8
1. Создать веб-проект Maven
Откройте eclipse, затем создайте новый веб-проект maven и назовите его SpringBootRest.
Структура сгенерированного проекта выглядит следующим образом: 
2. pom.xml
После создания веб-проекта первым шагом является настройка Spring Boot внутри pom.xml , поэтому мы добавляем следующее в качестве родительской зависимости:
|
1
2
3
4
5
|
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10.RELEASE</version></parent> |
Spring Boot предоставляет стартовую зависимость, называемую spring-boot-starter-web, которая автоматически импортирует все необходимые jar-файлы, необходимые для разработки и предоставления контроллеров REST. Итак, мы добавляем это как зависимость:
|
1
2
3
4
|
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency> |
В этом уроке мы используем встроенный tomcat, предоставленный Spring Boot, поэтому мы собираемся построить наше приложение как исполняемый файл jar, установив атрибут упаковки как jar:
|
1
|
<packaging>jar</packaging> |
PS: если вы хотите использовать внешний tomcat, обратитесь к разделу «Развертывание приложения Spring Boot на внешнем tomcat» .
Последний шаг настройки — добавление плагина Spring Boot:
|
1
2
3
4
5
6
7
8
|
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins></build> |
Буквально, это все, что нам нужно, чтобы начать разработку наших контроллеров REST.
Ниже приведены банки, автоматически импортированные Spring Boot: 
Это целый pom.xml для справки:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <modelVersion>4.0.0</modelVersion> <groupId>com.programmer.gate</groupId> <artifactId>SpringBootRest</artifactId> <packaging>jar</packaging> <version>0.0.1-SNAPSHOT</version> <name>SpringBootRest</name> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project> |
3. Application.java
Второй шаг — создать класс инициализатора Spring Boot, это точка входа нашего приложения. Аннотирование класса с помощью @SpringBootApplication эквивалентно использованию @Configuration, @EnableAutoConfiguration и @ComponentScan с их атрибутами по умолчанию в традиционных приложениях Spring.
|
01
02
03
04
05
06
07
08
09
10
11
12
|
package com.programmer.gate; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplicationpublic class Application{ public static void main(String[] args) { SpringApplication.run(Application.class, args); }} |
PS: по умолчанию контейнер сервлета автоматически сканирует контроллеры REST, определенные в том же пакете инициализатора, любые контроллеры, определенные вне пакета, будут игнорироваться.
4. Реализация ресурсов REST
Мы собираемся внедрить очень простой платежный API, который взимает плату с покупателей за покупку товаров.
Наш API будет принимать только запросы JSON и отвечать ответами JSON , благодаря библиотеке Джексона, которая позволяет нам обрабатывать запросы и ответы как классы POJO, не беспокоясь о преобразованиях JSON / POJO .
Ниже приведен класс запроса на оплату, который должен быть представлен клиентами при каждом запросе на оплату:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package com.programmer.gate; public class PaymentRequest { private int userId; private String itemId; private double discount; public String getItemId() { return itemId; } public void setItemId(String itemId) { this.itemId = itemId; } public double getDiscount() { return discount; } public void setDiscount(double discount) { this.discount = discount; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } } |
И это базовый ответ, возвращаемый из нашего сервиса:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package com.programmer.gate; public class BaseResponse { private String status; private Integer code; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } } |
Теперь мы определяем наш контроллер с именем PaymentController в com.programmer.gate :
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
package com.programmer.gate; import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController; @RestController@RequestMapping("/payment")public class PaymentController { private final String sharedKey = "SHARED_KEY"; private static final String SUCCESS_STATUS = "success"; private static final String ERROR_STATUS = "error"; private static final int CODE_SUCCESS = 100; private static final int AUTH_FAILURE = 102; @RequestMapping(value = "/pay", method = RequestMethod.POST) public BaseResponse pay(@RequestParam(value = "key") String key, @RequestBody PaymentRequest request) { BaseResponse response = new BaseResponse(); if(sharedKey.equalsIgnoreCase(key)) { int userId = request.getUserId(); String itemId = request.getItemId(); double discount = request.getDiscount(); // Process the request // .... // Return success response to the client. response.setStatus(SUCCESS_STATUS); response.setCode(CODE_SUCCESS); } else { response.setStatus(ERROR_STATUS); response.setCode(AUTH_FAILURE); } return response; }} |
Единственный сервис, предоставляемый нашим контроллером, — это метод pay (), который выглядит очень простым, он проверяет клиентский запрос с использованием предварительно определенного общего ключа, обрабатывает запрос и возвращает статус операции.
Ниже приведены общие аннотации, используемые нашим контроллером:
- @RestController: эта аннотация помечает класс как ресурс, она неявно определяет аннотации @Controller и @ResponseBody mvc, при аннотировании класса с помощью @RestController не обязательно писать @ResponseBody рядом с классами POJO, возвращаемыми из ваших методов.
- @RequestMapping: эта аннотация определяет URL ресурса в дополнение к типу метода: GET / POST , в нашем примере мы предоставляем платежный сервис как POST, доступ к которому осуществляется через / payment / pay.
- @RequestParam: эта аннотация представляет конкретный параметр запроса, в нашем примере мы сопоставляем параметр запроса с именем key с ключом аргумента типа String.
- @RequestBody: эта аннотация представляет тело запроса, в нашем примере мы сопоставляем тело запроса с классом POJO типа PaymentRequest (Джексон обрабатывает преобразование JSON / POJO)
Как уже было отмечено, ответ представлен в виде BaseResponse, и нет необходимости аннотировать его, Джексон неявно преобразует его в JSON.
5. Разверните приложение
Ниже приведены шаги для развертывания нашего приложения:
- Щелкните правой кнопкой мыши pom.xml -> run-as -> Maven install
- Maven создает файл JAR с именем SpringBootRest-0.0.1-SNAPSHOT.jar внутри целевой папки
- Откройте cmd, затем запустите jar, используя: java -jar SpringBootRest-0.0.1-SNAPSHOT.jar
Итак, наше приложение запущено и готово обслуживать запросы через порт 8080 по умолчанию.
6. Протестируйте сервис
Чтобы протестировать наш API, мы используем клиентский плагин Advanced REST из chrome и инициируем 2 разных запроса:
Успешный запрос: в этом запросе мы передаем действительный общий ключ в качестве параметра запроса вместе с деталями элемента в теле запроса. Вот как это выглядит: 
И это наш ответ:
|
1
2
3
4
|
{ "status": "success", "code": 100} |
Запрос на сбой: этот запрос похож на приведенный выше, но с неверным общим ключом, вот что мы получаем из нашего API:
|
1
2
3
4
|
{ "status": "error", "code": 102} |
Вот и все, надеюсь, вы найдете это полезным.
| Опубликовано на Java Code Geeks с разрешения Хуссейна Терека, партнера нашей программы JCG . См. Оригинальную статью здесь: создание веб-службы REST с использованием Spring Boot
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |