Введение: Эта статья поможет вам создать простую службу отдыха с помощью Spring Boot.
Вы узнаете
Остальная служба, используемая в этом уроке
В этом уроке мы создадим три службы, используя соответствующие методы URI и HTTP:
@Getmapping ("/Student/{student}/courses"): вы можете запросить курсы, которые конкретный студент зарегистрировался с использованием метода запроса get и пример URI/студенты/студенты1/курсы.
@Getmapping ("/studies/{student}/courses/{courseId}"): вы можете использовать метод запроса получить и образец URI/студент/студент1/курсы/курсы1, чтобы получить конкретный курс для конкретного студента.
@Postmapping ("/Student/{student}/courses"): вы можете зарегистрировать курс для студентов, отправив почтовый запрос Uuri/Student1/Courses
Инструменты, которые вам понадобятся
Полный пример кода проекта Spring Boot Rest Maven
Наш репозиторий GitHub содержит все примеры кода-https://github.com/in28minutes/in28minutes.github.io/tree/master/code-zip-files
Сервис REST с помощью модульных и интеграционных тестов
Веб-сайт-springbootrestservices-simplerestserviceswithunitandintegrationtests.zip
Что такое отдых?
Отдых означает репрезентативный государственный перевод. REST указывает набор архитектурных ограничений. Любая услуга, которая соответствует этим условиям, называется Restful Service.
Пять важных условий для спокойного веб -сервиса:
Модель зрелости Ричардсона
Модель зрелости Ричардсона используется для идентификации уровня зрелости RESTful Web Service. Ниже приведены различные уровни и характеристики:
Уровень 0: разоблачить мыльные веб -сервисы в стиле отдыха. Операции для открытия используют службу REST (http: // server/getPosts, http: // server/deleteposts, http: // server/dothis, http: // server/dothat и т. Д.).
Уровень 1: Используйте правильный URI (с использованием существительного), чтобы разоблачить ресурс. Например: http: // server/accounts, http: // server/accounts/10. Однако метод HTTP не используется.
Уровень 2: Ресурс использует правильный метод URI + HTTP. Например, чтобы обновить учетную запись, вам необходимо сделать пут. Создайте учетную запись, и вы делаете пост. URI выглядит как посты/1/комментарии/5 и учетные записи/1/друзья/1.
Уровень 3: HatoAS (Hypermedia как двигатель состояния применения). Вы можете не только понять запрошенную информацию, но и следующее возможное действие, которое могут предпринять потребители службы. Запрашивая информацию о пользователе Facebook, служба REST может вернуть данные пользователя и информацию о том, как получить его недавние сообщения, как получить свои недавние комментарии и как получить список своих друзей.
Используйте соответствующий метод запроса
Всегда используйте метод HTTP. Лучшие практики для каждого метода HTTP заключаются в следующем:
GET: ничего не должно быть обновлено. Это должно быть идентифицированным (один и тот же результат называется несколько раз). Возможный код возврата 200 (ОК) + 404 (не найдено) + 400 (плохой запрос)
Пост: Новые ресурсы должны быть созданы. В идеале вернуть JSON и ссылка на недавно созданные ресурсы. Используйте тот же код возврата, когда это возможно. Также: код возврата 201 (создан) возможен.
Поместить: обновить известные ресурсы. Например: обновить данные клиента. Возможный код возврата: 200 (ОК)
Удалить: используется для удаления ресурсов.
Структура проекта
На следующем скриншоте показана структура проекта, которую мы создадим.
Некоторые детали:
Создать службу отдыха с помощью Spring Initiazr Boot
Создание обслуживания отдыха с Spring Initiazr - очень простой кусок торта. Мы будем использовать Spring Web MVC в качестве нашего веб -структуры.
Spring initiazr http://start.spring.io/ - отличный инструмент для начала создания проектов Spring Boot.
Как показано на рисунке выше, необходимо выполнить следующие шаги
Начать Spring initializr и выберите следующее
Выберите com.in28minutes.springboot как группа
Выберите студенческие услуги в качестве артефакта
Выберите следующие зависимости
Нажмите, чтобы создать проект.
Импортировать проект в Eclipse. Файл -> Импорт -> Существующие проекты Maven.
Если вы хотите узнать все файлы этого проекта, вы можете продолжить читать.
Внедрение бизнес -уровня приложений
Все приложения требуют данных. Мы будем использовать ArrayList, который является хранилищем данных в памяти, а не взаимодействует с реальной базой данных.
Студент может пройти несколько курсов. Курс имеет идентификатор, имя, описание и список шагов для завершения курса. У студента есть удостоверение личности, название, описание и список курсов, в которые он/она в настоящее время зачисляется. Студенческая служба предоставляет следующие публичные методы
Общественный список ReplieveAlLstudents () - Получите подробности всех студентов
Общественный студент -поиск
Общественные списки поиск
Общественный курс поиск
Общедоступный курс Addcoourse (String StudentId, курс курса) - добавьте курсы к существующим студентам
Пожалуйста, обратитесь к следующим файлам, чтобы реализовать Clodservice Class Service Speeding, а также курс класса моделей.
Добавить несколько служб отдыха
REST Service StudentController раскрывает несколько услуг GET.
пакет com.in28minutes.springboot.controller; import java.util.list; import org.springframework.beans.factory.annotation.autowired; импорт org.springframework.web.bindatation.getmapping; импорт org.spramework.web.bindatation.pathation. org.springframework.web.bind.annotation.restcontroller; import com.in28minutes.springboot.model.course; импорт com.in28minutes.springboot.service.studentservice; Студенческий сервис; @getMapping ("/students/{student}/courses") Общественный список <cous> retivecoursesforstudent (@pathvariable String StudentId) {return STUDEERSVICE.REVEVECOURSES (Студент);}@getMapping ("/{studentId}/{courseId}") StudentId,@pathvarible string courseId) {return studentservice.retrievecourse (studentId, courseId);}}Используйте почтальон, чтобы выполнить сервис Get
Мы отправим запрос на http: // localhost: 8080/студент/студент1/курсы/курс1 для проверки услуги. Ответ заключается в следующем.
{"id": "course1", "name": "Spring", "Описание": "10 шагов", "Шаги": ["Learn Maven", "Import Project", "первый пример", "Второй пример"]}На рисунке ниже показано, как мы выполняем услугу Get Postman - мой любимый инструмент для запуска службы REST.
Добавить службу отправки после
Когда создание ресурсов будет успешным, служба Post должна вернуть созданный статус (201).
@Postmapping ("/Student/{student}/courses") public responseentity <void> RegisterStudentForcourse (@pathvariable String StudentId, @Requestbody Course newcourse) {Course Course = StudentService.Addcourse (StudentId, newcourse); if (course = null) recavity.nocontent (). Servleturicomomponentsbuilder.fromcurrentRequest (). Path ("/{id}"). BuildAndExpand (course.getId ()). Touri (); return responseTity.created (местоположение) .build ();}Выполнить службу отдыха Post
Запрос образца показан ниже. Он содержит все детали студентов, зарегистрированных в курсе.
{«Имя»: «Микросервисы», «Описание»: «10 шагов», «Шаги»: [«Учимся, как разбить вещи», «Автоматизируйте все из всего», «Получите удовольствие»]}}}}}}}}}}}}На следующем изображении показано, как мы выполняем службу Post от Postman - мой любимый инструмент для запуска службы REST. Убедитесь, что вы перейдите на вкладку Body и выберите RAW. Выберите JSON в раскрывающемся меню. Скопируйте вышеуказанный запрос на тело.
URL, который мы используем, - это http: // localhost: 8080/студент/студент1/курсы.
Полный пример кода
Pom.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelversion>4.0.0.0</modelversion>образное > Студенты-обслуживание </artifactid> <sersion> 0.0.1-snapshot </version> <Cackaging> jar </packaging> <mame> Студент-служба </name> <socription> Демо Project for Spring Boot </description> <parent> <groupid> org.springframework.boot </GroupID> <StrifactId> Spring-boot-Starter-parent </artifactid> <sersion> 1.4.4.Releas -> </parent> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.report.outputencoding> utf-8 </project.Report.OutputEncoding> <java.version> 1.8 </java.version> </ Зависимость> <groupid> org.springframework.boot </GroupId> <ArtifactId> Spring-boot-Starter-Actuator </artifactid> </vehyederian> <depervice> <groupid> org.springframework.boot </GroupId> <strifactid> Spring-boot-Starter-Web </artifactid> </repertinody> </artepacty> </artepacty> </artifactid> </artifactid> </artifactid> Зависимость> <Dependency> <groupId> org.springframework.boot </GroupId> <artifactid> spring-boot-devtools </artifactid> <crappe> время выполнения </scope> </redicefactied> <groupid> Starter-test </artifactid> <cracpe> test </scope> </dependency> </dependencies> <buld> <blicins> <blicin> <groupd> org.springframework.boot </GroupId> <ratifactid> Spring-boot-maven-plugin </artifactid> </plugin> </plugins> </build> </project>
src/main/java/com/in28minutes/springboot/controller/student controller.java
Импорт java.net.uri; import java.util.list; import org.springframework.beans.factory.annotation.autowired; импорт org.springframework.http.responseanty; импорт org.springframework.web.bindation.getmaping; org.springframework.web.bind.annotation.pathviable; импорт org.springframework.web.bind.annotation.postmapping; импорт org.springframework.web.bindtation.Requestbody; import org.spramework.web.bindtation.restontroller; org.springframework.web.servlet.support.servleturicomomponentsbuilder; импорт com.in28minutes.springboot.model.course; импорт com.in28minutes.springboot.service.studentservice; @RestControllerPublic Студенческий сервис; @getMapping ("/students/{Student}/courses") Общедоступный список <cours> retivecoursforStudent (@pathvarible String StudentId) {return studentservice.retrievecourses (studentId);}@getMapp ("/watchdEd}/courses/{courseId}") StudentId,@pathviable String courseId) {return sturnyervice.retrieVecourse (studentId, courseId);}@postmapping ("/student/{student}/courses") public replowent <void> RegisterStudentForCourse (@pathvarible String STUDVEID, @RequestBody course = newcourse) {course = ourdervice.addcourse, worlyd, worlydcourse, wondcourse) {course = course = outdenvice. null) return responseentity.nocontent (). build (); uri location = servleturicomponentsbuilder.fromcurrentrequest (). path ("/{id}"). BuildAndexpand (course.getId ()). Touri (); return ReplectEntity.created (местоположение) .build ();src/main/java/com/in28minutes/springboot/model/course.java
Импорт java.util.list; Public Class Course {Private String Id; Private String name; частная строка Описание; частный список <String> Steps; // необходимый для вызванного: com.fasterxml.jackson.databind.jsonmappingException: // Не может конструировать экземпляр com.in28minutes.springboot.model.cover Конструктор или создатель по умолчанию, или, возможно, необходимо добавить // Тип информации?) public course () {} public Course (String Id, String name, строка описание, list <string> steps) {super (); this.id = id; this.name = name; this.descript id;} public String getDescription () {return description;} public String getName () {return name;} public list <string> getSteps () {return stears;}@overridepublic string toString () {return string.format ("cource [id =%s, name =%s, description =%s, spears =%s]", id, name, name name@stepbupr); hashcode () {final int prime = 31; int result = 1; result = prime * result + ((id == null)? 0: id.hashcode ()); return result;}@переопределить Boolean equals (Object obj) {if (this == obj) return true; if (obj = null) return false; ifclass ()! (Курс) obj; if (id == null) вернуть false;} else if (! Id.equals (ore.id)) вернуть false; return true;}}src/main/java/com/in28minutes/springboot/model/student.java
пакет com.in28minutes.springboot.model; import java.util.list; Public Class Clout {Private String Id; Private String Name; Private String Description; Private List <Course> Courses; Public Student (String Id, String name, list <coud> courses) {super (); this.id = id; name = name = name = name = name = name = name; это. getId () {return id;} public void setId (string id) {this.id = id;} public String getName () {return name;} public void setName (string name) {this.name = name;} public String getDescription () {return description;} public void setDescript Courses;} public void setCourses (list <couse> courses) {this.courses = courses;}@overridepublic string toString () {return string.format ("udpation [id =%s, name =%s, description =%s, courses =%s]", id, name, courses);src/main/java/com/in28minutes/springboot/service/sturny service.java
Пакет com.in28minutes.springboot.service; import java.math.biginteger; импорт java.security.securerandom; import java.util.arraylist; импорт java.util.arrays; importa.util.list; импорт org.spramework.steretype.componet; com.in28minutes.springboot.model.course; import com.in28minutes.springboot.model.student; @componentpublic Class Clacous Service {Private Static <colation> Clouds = New Arraylist <> (); Static {// инициализируйте курс DataCourse1 = Новый курс (Cust1 »,« Spring ». Maven "," Import Project "," первый пример "," второй пример ")); курс курса2 = новый курс (" course2 "," Spring Mvc ",« 10 примеров ", Arrays.aslist (" Learn Maven "," Import Project ",« Первый пример ",« Второй пример "); курс 3 = новый курс (« курс 3 »,« Spring »,« Учимся »,« Учимся »,« Учимся »,« Учимся »,« Учимся »,« Учимся »,« Учимся »,« Учимся »,« Учимся »,« Учимся »,« Учимся »,« Учимся »,« Учимся »,« Учимся ». Весна "," Learn Spring MVC "," первый пример ",« Второй пример »)); курс 4 = новый курс (« Course4 »,« Maven »,« Самый популярный курс Maven в Интернете! », Arrays.aslist (« Pom.xml »,« Строительный жизненный цикл »,« родительский POM »,« Импорт в Eclipse »); Программист и архитектор ", New ArrayList <> (arrays.aslist (course1, course2, course3, course4)); студент Satish = новый студент (" Student2 "," Satish T "," Hiker, Progrommer и Architect ", New Arraylist <> (Arrays.aslist (курс1, курс 2, курс 3)); retlieveallStudents () {return Students;} public Student Reptievestudent (String StudentId) {for (студент: студент: студенты) {if (student.getid (). equals (student)) {return Student;}} return null;} public list <course> retrievecourses (Strest studentId) {студент = retiveStudEd (студент); Student.getCourses ();} public Course ReptieVecourse (String StudentId, String CourseId) {Student Student = RETIVEVESTUDENT (StudentId); if (student == null) {return null;} для (курс: курс: студент. SecurerAndom (); публичный курс AddCourse (String StudentId, курс курса) {Студент Студент = RETIVEVESTUDENT (Студент); if (Студент == null) {return null;} string randomId = new BigInteger (130, случайный) .toString (32); курс. SetId (randomid); студент.getcourses (). Ud (course);src/main/java/com/in28minutes/springboot/sturnyervicessapplication.java
пакет com.in28minutes.springboot; import org.springframework.boot.springapplication; импорт org.springframework.boot.autoconfigure.springbootapplication; @SpringBootApplicationPublic Class -ClassERCESPPLICA {SpringApplication.run (Student SurvicesApplication.class, args);}}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.