[JAVA] J'ai essayé le guide d'introduction de Spring Boot [Création d'un service Web RESTful]

Objectif

Pour ceux qui ont terminé le Spring Quickstart Guide, ceux qui ont commencé à apprendre Spring Boot et ceux qui veulent le consulter.

Le fonctionnaire est un guide populaire, alors essayez-le! Je partagerai ce que j'ai appris en travaillant réellement sur Construire un service Web RESTful.

Environnement de développement


Système d'exploitation: macOS Mojave version 10.14.6
Éditeur de texte: Visual Studio Code (ci-après VSCode)
Java: 11.0.2

Cliquez ici pour la revue précédente

1. Démarrez le projet Spring Boot!

Tout d'abord, accédez à spring initial izr.

Cliquez sur le bouton ** AJOUTER DES DÉPENDANCES **. スクリーンショット_2020-06-29_13_14_12.png

Tapez «web» et sélectionnez «Spring Web».

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

Artéfact, nom changé en ** restservice **. La version Java est 11, alors sélectionnez 11.

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

Cliquez sur le bouton "GÉNÉRER".

Le fichier Zip sera téléchargé

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

Extrayez le fichier Zip.

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

Je suis prêt.

2. Ajoutez du code!

Ouvrez le dossier précédent avec VS Code. Nous vous recommandons d'installer le Java Extension Pack pour les extensions. Il est dit que vous devez l'installer.

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

Créons Greeting.java!

Créez un fichier Greeting.java dans src / main / java / com / example / restservice /.

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

Ajoutez le code dans le fichier Greeting.java.

Greeting.formulaire java rempli


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;
  }
}

Nous approfondirons le code que nous avons ajouté au fichier Greeting.java.

① Déclaration de constante

python


private final long id;
private final String content;

Il déclare respectivement un identifiant de type long et un contenu de type chaîne.

Puisque le «modificateur d'accès est privé» et que le «modificateur final est utilisé», c'est ** une constante qui ne peut être accédée qu'à partir de la même classe **. Puisqu'il s'agit d'une constante, il est impossible de réaffecter la valeur.

② Définition du constructeur

public Greeting(long id, String content) {
  this.id = id;
  this.content = content;
}

Décrivez le processus que vous souhaitez exécuter en même temps lorsqu'il est instancié. Cette fois, les valeurs initiales sont affectées à l'id et au contenu des constantes d'instance.

③ Définition de la méthode getter

python


public long getId() {
  return id;
}
public String getContent() {
  return content;
}

Il s'agit d'une méthode pour appeler les valeurs de id et content.

Greeting.java est maintenant terminé!

Créons GreetingController.java!

Créez un fichier GreetingController.java dans src / main / java / com / example / restservice /.

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

Ajoutez du code dans le fichier GreetingController.java.

GreetingController.formulaire java rempli


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));
  }
}

Nous approfondirons le code que nous avons ajouté au fichier GreetingController.java.

①@RestController

python


@RestController
public class GreetingController {
}

En écrivant cette annotation, Spring Boot la reconnaîtra en tant que contrôleur. La valeur de retour de la méthode sera le contenu de la réponse tel quel sans passer à View.

La méthode de salutation décrite plus tard utilise l'objet Greeting comme valeur de retour, mais comme Spring Boot le convertit automatiquement en JSON, JSON sera affiché à l'écran.

② Déclaration de constante

python


private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();

Il déclare respectivement un modèle de type chaîne et un compteur de type long.

Puisque le «modificateur d'accès est privé» et que le «modificateur final est utilisé», c'est ** une constante qui ne peut être accédée qu'à partir de la même classe **. Puisqu'il s'agit d'une constante, il est impossible de réaffecter la valeur.

** template ** utilise le modificateur static, c'est donc une constante qui n'existe qu'une seule fois pour la classe. Et % s est décrit car lorsque vous utilisez la méthode appelée String.format, vous devez spécifier le format spécifié comme premier argument.

** counter ** utilise la classe AtomicLong. J'expliquerai pourquoi cette classe est utilisée plus tard.

③ Définition de la méthode de salutation

python


@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
  return new Greeting(counter.incrementAndGet(), String.format(template, name));
}

@GetMapping (" / salutation ") est une annotation pour traiter la méthode de salutation lorsque l'URL est accédée en tant que 〇〇 / salutation (quand il y a une requête GET). Cela signifie que la méthode de salutation sera appelée lorsqu'il y aura accès à http: // localhost8080 / salutation.

L'argument «@ RequestParam» de la méthode de salutation peut recevoir le paramètre de requête de l'URL. Spécifie la valeur stockée dans ** String name **,

Si vous accédez à http: // localhost8080 / salutation, World est stocké dans name, Si http: // localhost8080 / salutation? Name = tanaka est accédé, name contiendra tanaka.

Enfin, creusez profondément dans la partie retour.

python


return new Greeting(counter.incrementAndGet(), String.format(template, name));

Chaque fois que http: // localhost8080 / salutation est accédé, il renvoie un objet Java qui instancie la classe Greeting. Nous passons counter.incrementAndGet () comme premier argument du nouveau constructeur Greeting et String.format (template, name) comme second argument.

Un traitement multiple est effectué en même temps, comme l'instanciation de la classe Greeting, l'incrémentation du compteur et le renvoi d'une chaîne de caractères avec un format spécifié.

L'incrément peut être décrit comme counter ++;, mais il peut ne pas être traité correctement lorsque plusieurs processus sont exécutés.

Nous définissons un compteur dans la classe AtomicLong ci-dessus et utilisons la méthode de classe ʻincrementAndGet () `pour incrémenter la valeur actuelle (compteur) et renvoyer la valeur incrémentée.

On dit qu'Atomic est une opération indivisible, et je l'ai interprétée comme définissant un compteur utilisant la classe AtomicLong afin de ne pas interrompre les autres traitements tant que l'ajout n'est pas terminé.

3. Lançons-le!

Maintenant que l'application est prête à fonctionner, vérifions.

Entrez la commande suivante dans le terminal et appuyez sur Entrée.

Terminal


$ ./mvnw spring-boot:run

Après avoir attendu environ 2 secondes, lorsque vous accédez à http: // localhost: 8080 / salutation,

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

Ensuite, lorsque vous accédez avec http: // localhost: 8080 / salutation? Name = tanaka,

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

Ensuite, lorsque vous accédez avec http: // localhost: 8080 / salutation? Name = suzuki,

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

L'identifiant augmente à chaque fois que vous y accédez, et lorsque vous y accédez avec / salutation? Nom = chaîne de caractères arbitraire, la valeur saisie est affichée!

Site de référence

** Guide de démarrage de Spring Boot ** ** Oracle's AtomicLong ** ** Que signifie être atomique ** ** Multithread ** ** [Bases de Java Concurrency](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

J'ai essayé le guide d'introduction de Spring Boot [Création d'un service Web RESTful]
Guide de démarrage de Spring Boot [Utilisation d'un service Web RESTful]
J'ai essayé le guide d'introduction de Spring Boot [Accès aux données avec JPA]
J'ai essayé de cloner une application Web pleine de bugs avec Spring Boot
J'ai essayé GraphQL avec Spring Boot
J'ai essayé Flyway avec Spring Boot
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
Un débutant Java a essayé de créer une application Web simple à l'aide de Spring Boot
J'ai essayé Spring.
Créer un serveur API Web avec Spring Boot
[J'ai essayé] Tutoriel de printemps
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
J'ai essayé Spring Batch
J'ai créé un serveur et un client Restful au printemps.
Un mémorandum lors de la création d'un service REST avec Spring Boot
J'ai écrit un test avec Spring Boot + JUnit 5 maintenant
J'ai essayé d'implémenter une application web pleine de bugs avec Kotlin
Je n'ai pas compris Spring Boot depuis un mois
Présentation de Spring Boot2, un framework Java pour le développement Web (pour les débutants)
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
J'ai créé un système d'exemple MVC simple à l'aide de Spring Boot
[Spring Boot] Création d'applications Web
J'ai essayé la machine Spring State
Implémentez un serveur API Web REST simple avec Spring Boot + MySQL
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 1/3 (paramètres Jasper Reports)
Créons une application Web de gestion de livres avec Spring Boot part1
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 3/3 (contrôle Spring MVC)
Créons une application Web de gestion de livres avec Spring Boot part3
Un voyage pour déchiffrer les «GUIDES» de Spring consommant une édition de service Web RESTful.
J'ai essayé de créer un environnement de développement Spring MVC sur Mac
Créons une application Web de gestion de livres avec Spring Boot part2
J'ai créé un formulaire de recherche simple avec Spring Boot + GitHub Search API.
J'ai essayé d'utiliser Spring + Mybatis + DbUnit
J'ai essayé un petit docker de digdag.
Spring Boot: exemple de projet d'API Restful
API RESTful d'autorisation d'accès au démarrage de printemps
Un mémo qui a touché Spring Boot
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 2/3 (création de modèle de formulaire)
J'ai essayé de créer une API Web qui se connecte à DB avec Quarkus
Déployer automatiquement des applications Web développées en Java à l'aide de Jenkins [Spring Boot App Edition]
Gorigori SIer SE a tenté de créer un service web par développement personnel
[Spring Boot] Je suis tombé sur un test du nombre d'appels de méthode (framework Spock)
[LINE BOT] J'ai créé un Ramen BOT avec Java (Maven) + Heroku + Spring Boot (1)