[JAVA] Guide de démarrage de Spring Boot [Utilisation d'un service Web RESTful]

Objectif

Pour ceux qui ont fini de travailler sur Spring Quickstart Guide, ceux qui ont commencé à apprendre Spring Boot et ceux qui veulent revoir

Le fonctionnaire est un guide populaire, alors essayez-le! Je partagerai ce que j'ai appris en travaillant réellement sur Consommer 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 consulter le guide de démarrage rapide Cliquez ici pour un examen de la création d'un service Web RESTful

1. Commençons le projet Spring Boot!

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

  1. Cliquez sur le bouton AJOUTER DES DÉPENDANCES et ajoutez Spring Web. 2.Artéfact, le nom a été changé en «repos consommant».
  2. Changez Java en 11.

Cliquez ensuite sur le bouton GENERATE pour télécharger le fichier Zip.

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

Extrayez le fichier Zip téléchargé et vous êtes prêt à partir.

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 Quote.java!

Créez un fichier Quote.java dans src / main / java / com / example / consumerrest /.

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

Ajoutez le code dans le fichier Quote.java.

Quote.java


package com.example.consumingrest;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class Quote {

  private String type;
  private Value value;

  public Quote() {
  }

  public String getType() {
    return type;
  }
  public void setType(String type) {
    this.type = type;
  }

  public Value getValue() {
    return value;
  }
  public void setValue(Value value) {
    this.value = value;
  }

  @Override
  public String toString() {
    return "Quote{" +
        "type='" + type + '\'' +
        ", value=" + value +
        '}';
  }
}

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

@JsonIgnoreProperties

Lors de la conversion d'un objet Java en JSON, ou lors de la réception d'une chaîne JSON et de sa conversion en un objet Java Il s'agit d'une annotation qui exclut plusieurs champs de la conversion.

En définissant ʻignoreUnknown = true`, vous pouvez empêcher une exception lors de la tentative de conversion d'une propriété non définie (supplémentaire), et ne convertir que le type et la valeur.

② Déclaration des variables

python


private String type;
private Value value;

Déclare un type de type chaîne et une variable de valeur de type Value.

Le modificateur d'accès est private, vous ne pouvez donc y accéder qu'à partir de la même classe **.

③ Définition du constructeur et de la méthode getter / setter

python


//constructeur
public Quote() {
}

//getter de type/Méthode Setter
public String getType() {
  return type;
}
public void setType(String type) {
  this.type = type;
}

//getter de valeur/Méthode Setter
public Value getValue() {
  return value;
}
public void setValue(Value value) {
  this.value = value;
}

Définit un constructeur sans argument.

Il définit une méthode getter pour obtenir la valeur de type et value, et une méthode setter pour définir la valeur.

@Override

python


@Override
public String toString() {
  return "Quote{" +
      "type='" + type + '\'' +
      ", value=" + value +
      '}';
}

La méthode toString est une méthode qui renvoie une représentation sous forme de chaîne telle que définie dans la classe java.lang.Object. L'annotation @ Override remplace la méthode toString définie dans la classe ʻObject avec cette classe. C'est une annotation pour spécifier `.

S'il n'est pas remplacé correctement, une erreur se produira. Par conséquent, si vous faites une faute de frappe comme toStrign (), une erreur se produira au moment de la compilation et elle vous le dira.

Cette fois, je le remplace pour renvoyer une chaîne pour afficher le type et la valeur pour plus de clarté.

Quote.java est maintenant terminé.

Créons Value.java!

Créez un fichier Value.java dans src / main / java / com / example / consumerrest /.

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

Ajoutez du code dans le fichier Value.java.

Value.java


package com.example.consumingrest;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class Value {

  private Long id;
  private String quote;

  public Value() {
  }

  public Long getId() {
    return this.id;
  }
  public String getQuote() {
    return this.quote;
  }

  public void setId(Long id) {
    this.id = id;
  }
  public void setQuote(String quote) {
    this.quote = quote;
  }

  @Override
  public String toString() {
    return "Value{" +
        "id=" + id +
        ", quote='" + quote + '\'' +
        '}';
  }
}

Value.java est presque identique à Quote.java.

Modifiez ConsumingrestApplication.java!

Je pense que l'état par défaut est le suivant.

ConsumingrestApplication.java


package com.example.consumingrest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ConsumingrestApplication {

  public static void main(String[] args) {
    SpringApplication.run(ConsumingrestApplication.class, args);
  }

}

Ajoutez le code en vous référant à la formule.

ConsumingrestApplication.java


package com.example.consumingrest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//Code ajouté
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class ConsumingrestApplication {

  //Code ajouté
  private static final Logger log = LoggerFactory.getLogger(ConsumingrestApplication.class);

  public static void main(String[] args) {
    SpringApplication.run(ConsumingrestApplication.class, args);
  }

  //Code ajouté
  @Bean
  public RestTemplate restTemplate(RestTemplateBuilder builder) {
    return builder.build();
  }

  //Code ajouté
  @Bean 
  public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
    return args -> {
      Quote quote = restTemplate.getForObject(
        "https://gturnquist-quoters.cfapps.io/api/random", Quote.class);
      log.info(quote.toString());
  }

}

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

① journal pour la sortie du journal

python


private static final Logger log = LoggerFactory.getLogger(ConsumingrestApplication.class);

Logger et LoggerFactory sont utilisés pour afficher le journal dans le terminal. Vous pouvez obtenir le journal en spécifiant la classe dans l'argument de LoggerFactory.getLogger ().

②RestTemplate

python


//Code ajouté
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
  return builder.build();
}

RestTemplate est une classe de client HTTP qui fournit des méthodes pour appeler les API REST (API Web). Cette fois, nous enverrons une requête GET à l'URL et l'utiliserons pour stocker le contenu de la réponse de destination dans Quote.class.

Il est enregistré dans le conteneur DI à l'aide de l'annotation «@ Bean» et «RestTemplateBuilder». L'enregistrement Bean est une annotation qui permet d'effectuer divers paramètres de Spring sur du code Java. Vous devez ajouter @ Configuration, mais il est inclus dans l'annotation @ SpringBootApplication.

③CommandLineRunner

python


//Code ajouté
@Bean 
public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
  return args -> {
    Quote quote = restTemplate.getForObject(
      "https://gturnquist-quoters.cfapps.io/api/random", Quote.class);
    log.info(quote.toString());
}

CommandLineRunner est une interface fonctionnelle avec une méthode appelée run. Par conséquent, ici, la méthode d'exécution est remplacée.

Spring Boot l'appellera après avoir exécuté l'application.

En tant que flux de traitement, Le résultat de restTemplate.getForObject () est assigné à la variable quote de type Quote. L'URL pour envoyer la requête GET est spécifiée dans le premier argument et la classe pour stocker le contenu de la réponse de la destination est spécifiée dans le second argument.

Après cela, la méthode info du journal définie dans ① est appelée et la méthode toString de la classe Quote y est appelée.

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 un certain temps, les caractères suivants apparaîtront dans le terminal.

Terminal


Quote{type='success', value=Value{id=12, quote='@springboot with @springframework is pure productivity! Who said in #java one has to write double the code than in other langs? #newFavLib'}}

Cet identifiant et cette citation sont écrits de manière aléatoire, donc si vous arrêtez l'application et entrez à nouveau la commande d'exécution dans le terminal.

Terminal


Quote{type='success', value=Value{id=4, quote='Previous to Spring Boot, I remember XML hell, confusing set up, and many hours of frustration.'}}

Il a un identifiant et une citation différents des précédents.

Site de référence

RestTemplate CommandLineRunner ** Ignorer les propriétés inconnues lors de la désérialisation avec jackson ** ** Comprendre DI ** ** Saisissons l'image d'opération (atmosphère) du conteneur DI de Spring ** ** Créer une application de ligne de commande simple avec Spring Boot **

Recommended Posts

Guide de démarrage de Spring Boot [Utilisation d'un service Web RESTful]
J'ai essayé le guide d'introduction de Spring Boot [Création 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
Un voyage pour déchiffrer les «GUIDES» de Spring consommant une édition de service Web RESTful.
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é 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)
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
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
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)
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)