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
Tout d'abord, accédez à spring initial izr.
Cliquez sur le bouton ** AJOUTER DES DÉPENDANCES **.
Tapez «web» et sélectionnez «Spring Web».
Artéfact, nom changé en ** restservice **. La version Java est 11, alors sélectionnez 11.
Cliquez sur le bouton "GÉNÉRER".
Le fichier Zip sera téléchargé
Extrayez le fichier Zip.
Je suis prêt.
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.
Créez un fichier Greeting.java dans src / main / java / com / example / restservice /
.
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.
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.
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.
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éez un fichier GreetingController.java dans src / main / java / com / example / restservice /
.
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.
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.
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é.
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,
Ensuite, lorsque vous accédez avec http: // localhost: 8080 / salutation? Name = tanaka,
Ensuite, lorsque vous accédez avec http: // localhost: 8080 / salutation? Name = suzuki,
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!
** 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