Einführung: Dieser Artikel hilft Ihnen dabei, einen einfachen REST -Service mit Spring Boot zu erstellen.
Sie werden lernen
Der in diesem Tutorial verwendete REST -Service
In diesem Tutorial erstellen wir drei Dienste mit den entsprechenden URI- und HTTP -Methoden:
@Getmapping ("/studentid/{studentID}/Kurse"): Sie können Kurse abfragen, die ein bestimmter Schüler mithilfe der Anforderungsmethode GET und das Beispiel URI/Studenten/Student1/Kurse registriert hat.
@Getmapping ("/studentIn/{studentID}/cures/{curseId}"): Sie können die Anforderungsmethode GET und Beispiel URI/student/student1/curses/cours1 verwenden, um einen bestimmten Kurs für einen bestimmten Schüler zu erhalten.
@Postmapping ("/studentid/{studentId}/Kurse"): Sie können einen Kurs für Studenten anmelden, indem Sie eine Postanfrage an Uuri/student/student1/cures senden
Tools, die Sie benötigen
Komplette Spring Boot REST Maven Project Code Beispiel
Unser Github-Repository enthält alle Code-Beispiele-https://github.com/in28minutes/in28Minutes.github.io/tree/master/code-zip-files
REST -Service mit Einheiten- und Integrationstests
Website-SpringbootrestServices-SimplerestServicesWithunitandIntegrationTests.zip
Was ist Ruhe?
Ruhe steht für Repräsentationsstaatenübertragung. Rest gibt eine Reihe von architektonischen Einschränkungen an. Jeder Dienst, der diesen Bedingungen erfüllt, wird als erholsamer Service bezeichnet.
Fünf wichtige Bedingungen für den erholsamen Webdienst:
Richardson -Reifegradmodell
Das Richardson -Reifegradmodell wird verwendet, um den Reifegrad des erholsamen Webdienstes zu identifizieren. Im Folgenden sind die unterschiedlichen Ebenen und Eigenschaften:
Stufe 0: Seifenwebdienste im Ruhezustand aufdecken. Die exponierten Operationen verwenden den REST -Dienst (http: // server/getPosts, http: // server/deleteposts, http: // server/dothis, http: // server/dothat usw.).
Stufe 1: Verwenden Sie den richtigen URI (mit Substantiv), um die Ressource freizulegen. Zum Beispiel: http: // server/konten, http: // server/konten/10. Die HTTP -Methode wird jedoch nicht verwendet.
Stufe 2: Die Ressource verwendet die richtige URI + HTTP -Methode. Um ein Konto zu aktualisieren, müssen Sie einen Put machen. Erstellen Sie ein Konto und Sie machen einen Beitrag. URI sieht aus wie Beiträge/1/Kommentare/5 und Konten/1/Freunde/1.
Stufe 3: Hateoas (Hypermedia als Motor des Anwendungszustands). Sie können nicht nur die angeforderten Informationen verstehen, sondern auch die nächste mögliche Maßnahme, die die Service -Verbraucher ergreifen können. Wenn Sie Informationen über einen Facebook -Benutzer anfordern, kann der REST -Service Benutzerdetails und Informationen zum Erhalten seiner letzten Beiträge, zum Erhalten seiner letzten Kommentare und zum Abrufen einer Liste seiner Freunde zurückgeben.
Verwenden Sie die entsprechende Anforderungsmethode
Verwenden Sie immer die HTTP -Methode. Die Best Practices für jede HTTP -Methode sind wie folgt:
Holen Sie sich: Nichts sollte aktualisiert werden. Es sollte idempotent sein (das gleiche Ergebnis wird mehrmals aufgerufen). Möglicher Rückgabecode 200 (OK) + 404 (nicht gefunden) + 400 (schlechte Anfrage)
Beitrag: Neue Ressourcen sollten erstellt werden. Ret idealerweise JSON zurück und verlinke zu neu erstellten Ressourcen. Verwenden Sie nach Möglichkeit den gleichen Rückgabescode. Außerdem: Rückgabecode 201 (erstellt) ist möglich.
Put: Update Bekannte Ressourcen. Zum Beispiel: Kundendetails aktualisieren. Möglicher Rückgabecode: 200 (OK)
Löschen: Wird zum Löschen von Ressourcen verwendet.
Projektstruktur
Der folgende Screenshot zeigt die Struktur des Projekts, die wir erstellen werden.
Einige Details:
Erstellen Sie einen REST -Dienst mit dem Spring Initializr -Boot
Das Erstellen eines REST -Service mit Spring Initializr ist ein sehr einfaches Stück Kuchen. Wir werden Spring Web MVC als unser Web -Layer -Framework verwenden.
Spring Initializr http://start.spring.io/ ist ein großartiges Werkzeug, um die Erstellung von Spring -Boot -Projekten zu starten.
Wie in der obigen Abbildung gezeigt, müssen die folgenden Schritte durchgeführt werden
Starten Sie Spring Initializr und wählen Sie Folgendes aus
Wählen Sie com.in28Minutes.springboot als Gruppe
Wählen Sie Schülerservices als Artefakt aus
Wählen Sie die folgenden Abhängigkeiten aus
Klicken Sie hier, um das Projekt zu generieren.
Importieren Sie das Projekt in Eclipse. Datei -> Import -> Bestehende Maven -Projekte.
Wenn Sie alle Dateien dieses Projekts kennen möchten, können Sie weiter lesen.
Implementierung der Anwendungsgeschäftsschicht
Alle Anwendungen erfordern Daten. Wir werden ArrayList verwenden, ein In-Memory-Datenspeicher, anstatt mit einer realen Datenbank zu interagieren.
Ein Schüler kann mehrere Kurse belegen. Der Kurs enthält eine ID, einen Namen, eine Beschreibung und eine Liste von Schritten, um den Kurs abzuschließen. Der Student verfügt über eine ID -Karte, einen Namen, eine Beschreibung und eine Liste von Kursen, an denen er/sie derzeit eingeschrieben ist. Studentenservice bietet die folgenden öffentlichen Methoden
öffentliche Liste RetriereAllstudents () - Details aller Schüler abrufen
Abruf der Öffentlichkeit Studenten (String studentID) - Rufspezifische Studentendetails abrufen
öffentliche Liste Abrufenabschlüsse (String studentID) - Suchen Sie alle Kurse, für die sich Studenten registrieren lassen
ARBERUNGSREIFUNGENCOURSE (STRING StudentID, String CourseID) - Rufen Sie Details eines bestimmten Kurses ab, für den sich ein Student registriert hat
öffentlicher Kurs AddCourse (String StudentID, Kurskurs) - Fügen Sie Kursen zu bestehenden Studenten hinzu
In den folgenden Dateien finden Sie in den folgenden Dateien, um den Dienstklassenstudentenservice und den Modellklassenkurs und den Schüler zu implementieren.
Fügen Sie mehrere REST -Dienste hinzu
REST Service StudentController enthält mehrere erhaltene Dienste.
Paket com.in28Minutes.springboot.controller; import Java.util.list; import org.springframework.bean.factory.Annotation.autowired; org.springframework.web.bind.annotation.restcontroller; import com.in28Minutes.springboot.model studentService;@GetMapping("/students/{studentId}/courses")public List<Course> retrieveCoursesForStudent(@PathVariable String studentId) {return studentService.retrieveCourses(studentId);}@GetMapping("/students/{studentId}/courses/{courseId}")public Course retrieveDetailsForCourse(@PathVariable String studentID,@pathVariable String curseId) {return studentService.retrieveCourse (studentId, cursed);}}Verwenden Sie Postbote, um einen Get -Service durchzuführen
Wir werden eine Anfrage an http: // localhost: 8080/student/student1/curses/cours1 einleiten, um den Service zu testen. Die Antwort ist wie folgt.
{"ID": "Kurs1", "Name": "Spring", "Beschreibung": "10 Schritte", "Schritte": ["Lernen Sie Maven", "Projekt importieren", "Erstes Beispiel", "zweites Beispiel"]}Das Bild unten zeigt, wie wir Postman's Get -Service ausführen - mein Lieblingswerkzeug zum Ausführen von REST -Service.
Post -Rast -Service hinzufügen
Wenn die Ressourcenerstellung erfolgreich ist, sollte der Post -Service den erstellten Status (201) zurückgeben.
@Postmapping ("/studentid/{studentid}/cures") public responseentity <void> RegisterStudentforCourse (@PathVariable String studentid, @RequestBody Course Newcourse) {Kurskurse = Studentenservice.Addcourse (studentId, NewCourse); ServletUricomponentsBuilder.FromCurrentRequest (). Path ("/{id}"). BuildandExpand (curse.getId ()). Touri (); return responseentity.created (Ort) .build ();}Post -Rast -Service ausführen
Die Beispielanforderung ist unten angezeigt. Es enthält alle Details von Studenten, die sich im Kurs einschreiben.
{"Name": "Microservices", "Beschreibung": "10 Schritte", "Schritte": ["lernen, wie man Dinge aufschlacht", "Automatisieren Sie die Hölle aus allem", "Spaß haben"]}Das folgende Bild zeigt, wie wir den Postdienst von Postman ausführen - mein Lieblingswerkzeug zum Ausführen von REST -Service. Stellen Sie sicher, dass Sie zur Registerkarte "Körper" gehen und RAW wählen. Wählen Sie JSON im Dropdown-Menü. Kopieren Sie die oben genannte Anfrage an den Körper.
Die URL, die wir verwenden, ist http: // localhost: 8080/student/student1/cures.
Vollständiger Codebeispiel
pom.xml
<? 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</modelversion><Groupid> com.in28minutes.springboot</groupid><Artifactid > Student-Services </artifactId> <version> 0.0.1-Snapshot </Version> <Paketing> jar </packaging> <name> Student-Service </name> <beschreibung> Demo Projekt für Spring Boot </Beschreibung> <in <Strups> <gruppe> org.springframework --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies>< dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></ Abhängigkeit> <Depopentcy> <gruppe> org.springframework starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
src/main/java/com/in28Minutes/Springboot/Controller/studentController.java
importieren java.net.uri; import java.util.list; import org.springframework.beans.factory.annotation.autowired; org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.postmapping; org.springframework.web.servlet.support.servleturicomponentsBuilder; Import com.in28Minutes.springboot.model.Course; studentService;@GetMapping("/students/{studentId}/courses")public List<Course> retrieveCoursForStudent(@PathVariable String studentId) {return studentService.retrieveCourses(studentId);}@GetMapping("/students/{studentId}/courses/{courseId}")public Course retrieveDetailsForCourse(@PathVariable String studentId,@PathVariable String courseId) {return studentService.retrieveCourse(studentId, courseId);}@PostMapping("/students/{studentId}/courses")public ResponseEntity<Void> registerStudentForCourse(@PathVariable String studentId, @RequestBody Course newCourse) {Course course = studentService.addCourse(studentId, Newcourse); if (kurs == null) return responseentity.nocontent (). build (); uri location = servleturicomponentsBuilder.FromCurrentRequest () path ("/{id}"). BuildandExpand (cours.getId (). Touri ();src/main/java/com/in28Minutes/Springboot/modell/lass.java
Java.util.List; öffentliche Klasse Kurs {private String -ID; private String -Name; private String -Beschreibung; private Liste <string> Schritte; // benötigt von: com.fasterxml.jackson Wert // (Fehlende Standardkonstruktor oder Ersteller oder möglicherweise müssen // Informationen eingeben. = id;} public String getDescription () {return Beschreibung;} public String getName () {return name;} publiclist <string> getSsteps () {Return -Schritte;}@oversidepublic String toString () {return String.Format ("Kurs [id =%s, name =%s, Beschreibung =%S, Schritte =%s,], Schritte =%s," ig% HashCode () {Final int Prime = 31; int result = 1; result = prime * result + ((id == null)? 0: id.hashCode (); return Ergebnis;}@oversidepublic boolean Equals (Object Obj) {if (this ==) return true; if (OBJ == NULL). .src/main/java/com/in28Minutes/Springboot/modell/student.java
Paket com.in28Minutes.springboot.model; importieren java.util.list; public class student {private String id; private String -Name; private String -Beschreibung; private Liste <Kurs> Kurse; öffentliche Schüler (String -ID, String -Name, String Name, List <Kurs> Kurse) {Super (); 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 cresent;} public void setscription (String) {{this.description = {{this.description = {this.description Kurse;} public void setCourse (List <Kurs> Kurse) {this.Course = Kurse;}@oversidepublic String toString () {return String.Format ("Student [id =%s, name =%s, Beschreibungsrc/main/java/com/in28Minutes/Springboot/Service/studentservice.java
Paket com.in28Minutes.springboot.service; import Java.math.biginteger; Import Java.Security.securerandom; Import Java.util.ArrayList; Import Java.util.Arrays; Import Java.util.List; com.in28Minutes.springboot.model.Course; com.in28Minutes.springboot.model.Student; @ComponentPublic Class studentservice {private static List <Student> student> student = new ArrayList <> (); Arrays.aSlist ("Learn Maven", "Importing Project", "Erstes Beispiel", "zweites Beispiel"); Kurskurs2 = neuer Kurs ("Kurs2", "Spring MVC", "10 Beispiele", Arrays.aSlist ("Learn Maven", "Importing Project", "Erstbeispiel", "Second Beispiel"); Maven "," Learn Spring "," Learn Spring MVC "," Erstes Beispiel "," zweites Beispiel "); Kurskurse4 = neuer Kurs (" Kurs4 "," Maven "," beliebtesten Maven -Kurs im Internet! ", Arrays. Karanam "," Wanderer, Programmierer und Architekt ", New ArrayList <> (Arrays.aslist (Kurs1, Kurs2, Kurs3, Kurs4)); Student Satish = New Student (" Student2 "," Satish T "," Hker, Programmierer und Architekten ", New ArrayList <> (Arrays. Kurs4))); Studenten.Add (Ranga); Studenten.Add (Satish);} Public List <Studenten> retriereAllstudents () {return students;} öffentliche Student Abrufen Abrufen (String studentID) {für (Student Student: Student Student: Student Student) {if (student.getId (). EqualS (studentId) {return student student;}} return Nreting NULL; {Student Student = Retrievestudent (studentId); if (student == null) {return null;} return student.getCourse ();} öffentliche Kurs -Abrufen (String studentID, String cursed) {student student = appestudent (studentId); if (student == null) {{{{{{{)} für (Kurs: Kurs: Kurs: Kurs: Kurs: Kurs: Kurs: Kurs: Kurs: Kurs: Kurs: Kurs: Kurs: Kurs: (curse.getId (). Equals (curseId)) {return cours;}} return null;} private Securerandom random = new Securerandom (); öffentlicher Kurs Addcourse (String studentID, Kurskurs) {student student = apparrevestudent (studentId); if (student == null) {return null;} String -String -Random = New BigIdent = New BigIdent = New BigId. zufällig) .ToString (32); Kurs.SetId (RandomID); Student.GetCourse (). Add (Kurs); Rückgabekurs;}}src/main/java/com/in28Minutes/Springboot/studentservicesApplication.java
Paket com.in28minutes.springboot; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure {SpringApplication.run (studentervicesApplication.class, args);}}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.