Für diejenigen, die die Spring Quickstart-Anleitung ausgefüllt haben, diejenigen, die Spring Boot gelernt haben, und diejenigen, die es überprüfen möchten.
Der Beamte ist ein beliebter Reiseführer, probieren Sie es aus! Ich werde mitteilen, was ich durch die eigentliche Arbeit an Erstellen eines RESTful-Webdienstes gelernt habe.
Entwicklungsumgebung
Betriebssystem: macOS Mojave Version 10.14.6
Texteditor: Visual Studio Code (im Folgenden VSCode)
Java: 11.0.2
Klicken Sie hier für die vorherige Überprüfung
Greifen Sie zunächst auf spring initial izr zu.
Klicken Sie auf die Schaltfläche ** ADD DEPENDENCIES **.
Geben Sie "web" ein und wählen Sie "Spring Web".
Artefakt, Name geändert in ** restservice **. Die Java-Version ist 11, wählen Sie also 11.
Klicken Sie auf die Schaltfläche "GENERATE".
Die Zip-Datei wird heruntergeladen
Extrahieren Sie die Zip-Datei.
Ich bin bereit.
Öffnen Sie den vorherigen Ordner mit VS Code. Wir empfehlen, das Java Extension Pack für Erweiterungen zu installieren. Es wird gesagt, dass Sie es installieren sollten.
Erstellen Sie eine Greeting.java-Datei in src / main / java / com / example / restservice /
.
Fügen Sie den Code in die Datei Greeting.java ein.
Greeting.Java ausgefülltes Formular
package com.example.restservice;
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
Wir werden uns eingehender mit dem Code befassen, den wir der Datei Greeting.java hinzugefügt haben.
python
private final long id;
private final String content;
Es deklariert eine lange Typ-ID bzw. einen String-Typ-Inhalt.
Da der "Zugriffsmodifikator privat ist" und der "letzte Modifikator verwendet wird", ist es ** eine Konstante, auf die nur innerhalb derselben Klasse zugegriffen werden kann **. Da es sich um eine Konstante handelt, ist es unmöglich, den Wert neu zuzuweisen.
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
Beschreiben Sie den "Prozess, den Sie gleichzeitig ausführen möchten, wenn er instanziiert wird". Dieses Mal werden die Anfangswerte den Instanzkonstanten ID und Inhalt zugewiesen.
python
public long getId() {
return id;
}
public String getContent() {
return content;
}
Dies ist eine Methode zum Aufrufen der Werte von id und content.
Greeting.java ist jetzt fertig!
Erstellen Sie eine GreetingController.java-Datei in src / main / java / com / example / restservice /
.
Fügen Sie Code in die Datei GreetingController.java ein.
GreetingController.Java ausgefülltes Formular
package com.example.restservice;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
Wir werden uns eingehender mit dem Code befassen, den wir der Datei GreetingController.java hinzugefügt haben.
①@RestController
python
@RestController
public class GreetingController {
}
Durch das Schreiben dieser Anmerkung erkennt Spring Boot sie als Controller. Der Rückgabewert der Methode ist der Inhalt der Antwort, ohne auf View umzuschalten.
Die später beschriebene Begrüßungsmethode verwendet das Begrüßungsobjekt als Rückgabewert. Da Spring Boot es jedoch automatisch in JSON konvertiert, wird JSON auf dem Bildschirm angezeigt.
python
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
Es deklariert eine Zeichenfolgentypvorlage bzw. einen langen Typzähler.
Da der "Zugriffsmodifikator privat ist" und der "letzte Modifikator verwendet wird", handelt es sich um eine Konstante, auf die nur innerhalb derselben Klasse zugegriffen werden kann. Da es sich um eine Konstante handelt, ist es unmöglich, den Wert neu zuzuweisen.
** template ** verwendet den statischen Modifikator, sodass es sich um eine Konstante handelt, die nur einmal für die Klasse vorhanden ist.
Und % s
wird beschrieben, weil Sie bei Verwendung der Methode String.format das angegebene Format als erstes Argument angeben müssen.
** counter ** verwendet die AtomicLong-Klasse. Ich werde später erklären, warum diese Klasse verwendet wird.
python
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
"@GetMapping (" / greeting ")" ist eine Anmerkung zum Verarbeiten der Begrüßungsmethode, wenn auf die URL als "〇〇 / greeting" zugegriffen wird (wenn eine GET-Anforderung vorliegt). Dies bedeutet, dass die Begrüßungsmethode aufgerufen wird, wenn Zugriff auf http: // localhost8080 / greeting besteht.
Das Argument "@ RequestParam" der Begrüßungsmethode kann den Abfrageparameter der URL empfangen. Gibt an, welcher Wert in ** String name ** gespeichert ist.
Wenn auf http: // localhost8080 / greeting zugegriffen wird, wird World in name
gespeichert.
Wenn auf http: // localhost8080 / greeting? Name = tanaka zugegriffen wird, enthält name tanaka
.
Zum Schluss tief in den Rücklauf eintauchen.
python
return new Greeting(counter.incrementAndGet(), String.format(template, name));
Bei jedem Zugriff auf http: // localhost8080 / greeting wird ein Java-Objekt zurückgegeben, das die Greeting-Klasse instanziiert. Wir übergeben "counter.incrementAndGet ()" als erstes Argument des neuen Greeting-Konstruktors und "String.format (Vorlage, Name)" als zweites Argument.
Es werden mehrere Verarbeitungen gleichzeitig ausgeführt, z. B. das Instanziieren der Begrüßungsklasse, das Inkrementieren des Zählers und das Zurückgeben einer Zeichenfolge mit einem bestimmten Format.
Inkrement kann als "counter ++;" beschrieben werden, wird jedoch möglicherweise nicht korrekt verarbeitet, wenn mehrere Prozesse ausgeführt werden.
Wir definieren einen Zähler in der obigen AtomicLong-Klasse und verwenden die Methode der Klasse "incrementAndGet ()", um den aktuellen Wert (Zähler) zu erhöhen und den inkrementierten Wert zurückzugeben.
Atomic soll eine unteilbare Operation sein, und ich habe es so interpretiert, dass es einen Zähler mit der AtomicLong-Klasse definiert, um die andere Verarbeitung nicht zu unterbrechen, bis die Addition abgeschlossen ist.
Nachdem die Anwendung nun ausgeführt werden kann, überprüfen wir sie.
Geben Sie den folgenden Befehl in das Terminal ein und drücken Sie die Eingabetaste.
Terminal
$ ./mvnw spring-boot:run
Wenn Sie nach etwa 2 Sekunden auf http: // localhost: 8080 / greeting zugreifen,
Als nächstes, wenn Sie mit http: // localhost: 8080 / greeting zugreifen? Name = tanaka,
Als nächstes, wenn Sie mit http: // localhost: 8080 / greeting zugreifen? Name = suzuki,
Die ID erhöht sich bei jedem Zugriff und wenn Sie mit "/ greeting? Name = beliebige Zeichenfolge" zugreifen, wird der eingegebene Wert angezeigt!
** Erste Schritte mit Spring Boot ** ** AtomicLong von Oracle ** ** Was bedeutet es, atomar zu sein ** ** Multithread ** ** [Grundlagen der Java-Parallelität](https://qiita.com/stk_odoroki/items/bddaeec8775406c63258#%E3%82%A2%E3%83%88%E3%83%9F%E3%83%83%E3 % 82% AF% E6% 80% A7) **