Это руководство содержит пошаговое руководство по созданию полноценного веб-сервиса с использованием 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; @SpringBootApplication public 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, являются их собственными. |