[JAVA] Ich habe das Spring Boot-Einführungshandbuch [Erstellen eines RESTful-Webdiensts] ausprobiert.

Zweck

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

1. Starten wir das Spring Boot-Projekt!

Greifen Sie zunächst auf spring initial izr zu.

Klicken Sie auf die Schaltfläche ** ADD DEPENDENCIES **. スクリーンショット_2020-06-29_13_14_12.png

Geben Sie "web" ein und wählen Sie "Spring Web".

スクリーンショット 2020-06-29 13.30.24.png

Artefakt, Name geändert in ** restservice **. Die Java-Version ist 11, wählen Sie also 11.

スクリーンショット_2020-07-01_14_56_49.png

Klicken Sie auf die Schaltfläche "GENERATE".

Die Zip-Datei wird heruntergeladen

スクリーンショット 2020-07-01 15.09.25.png

Extrahieren Sie die Zip-Datei.

スクリーンショット 2020-07-01 15.10.29.png

Ich bin bereit.

2. Code hinzufügen!

Ö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.

スクリーンショット 2020-06-30 10.08.25.png

Lassen Sie uns Greeting.java erstellen!

Erstellen Sie eine Greeting.java-Datei in src / main / java / com / example / restservice /.

スクリーンショット 2020-07-01 15.30.40.png

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.

① Konstantenerklärung

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.

② Definition des Konstruktors

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.

③ Definition der Getter-Methode

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!

Lassen Sie uns GreetingController.java erstellen!

Erstellen Sie eine GreetingController.java-Datei in src / main / java / com / example / restservice /.

スクリーンショット 2020-07-01 16.36.36.png

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.

② Konstantenerklärung

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.

③ Definition der Begrüßungsmethode

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.

3. Lass es uns laufen!

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,

スクリーンショット 2020-07-02 11.33.39.png

Als nächstes, wenn Sie mit http: // localhost: 8080 / greeting zugreifen? Name = tanaka,

スクリーンショット 2020-07-02 11.35.10.png

Als nächstes, wenn Sie mit http: // localhost: 8080 / greeting zugreifen? Name = suzuki,

スクリーンショット 2020-07-02 11.35.31.png

Die ID erhöht sich bei jedem Zugriff und wenn Sie mit "/ greeting? Name = beliebige Zeichenfolge" zugreifen, wird der eingegebene Wert angezeigt!

Referenzseite

** 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) **

Recommended Posts

Ich habe das Spring Boot-Einführungshandbuch [Erstellen eines RESTful-Webdiensts] ausprobiert.
Spring Boot Erste Schritte [Konsumieren eines RESTful-Webdienstes]
Ich habe das Spring Boot-Einführungshandbuch [Zugriff auf Daten mit JPA] ausprobiert.
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
Ich habe GraphQL mit Spring Boot ausprobiert
Ich habe Flyway mit Spring Boot ausprobiert
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Java-Anfänger haben versucht, mit Spring Boot eine einfache Webanwendung zu erstellen
Ich habe es mit Spring versucht.
Erstellen Sie einen Web-API-Server mit Spring Boot
[Ich habe es versucht] Spring Tutorial
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Ich habe Spring Batch ausprobiert
Ich habe im Frühjahr einen Restful-Server und -Client erstellt.
Ein Memorandum beim Erstellen eines REST-Service mit Spring Boot
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Ich habe versucht, eine Webanwendung voller Fehler mit Kotlin zu implementieren
Ich habe Spring Boot seit einem Monat nicht mehr verstanden
Einführung von Spring Boot2, einem Java-Framework für die Webentwicklung (für Anfänger)
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Ich habe mit Spring Boot ein einfaches MVC-Beispielsystem erstellt
[Spring Boot] Erstellung von Webanwendungen
Ich habe Spring State Machine ausprobiert
Implementieren Sie einen einfachen Web-REST-API-Server mit Spring Boot + MySQL
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 1/3 (Jasper Reports-Einstellungen) zu drucken.
Erstellen wir eine Buchverwaltungs-Webanwendung mit Spring Boot part1
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 3/3 (Spring MVC-Steuerung) zu drucken.
Lassen Sie uns mit Spring Boot part3 eine Webanwendung für die Buchverwaltung erstellen
Eine Reise, um Spring's "GUIDES" zu entschlüsseln, die eine RESTful Web Service Edition verbrauchen.
Ich habe versucht, eine Spring MVC-Entwicklungsumgebung auf einem Mac zu erstellen
Lassen Sie uns mit Spring Boot part2 eine Webanwendung für die Buchverwaltung erstellen
Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.
Ich habe versucht, Spring + Mybatis + DbUnit zu verwenden
Ich habe ein wenig digdags docker.run_options ausprobiert
Spring Boot: Restful API-Beispielprojekt
Spring Boot Access Authorization RESTful API
Ein Memo, das Spring Boot berührte
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 2/3 (Formularvorlagenerstellung) zu drucken.
Ich habe versucht, eine Web-API zu erstellen, die mit Quarkus eine Verbindung zur Datenbank herstellt
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Spring Boot App Edition]
Gorigori SIer SE hat versucht, durch persönliche Entwicklung einen Webdienst zu erstellen
[Spring Boot] Ich bin auf einen Methodenaufruf-Count-Test gestoßen (Spock-Framework)
[LINE BOT] Ich habe einen Ramen BOT mit Java (Maven) + Heroku + Spring Boot (1) gemacht.