[JAVA] Un voyage pour déchiffrer les «GUIDES» de Spring consommant une édition de service Web RESTful.

Consuming a RESTful Web Service

Qu'est-ce que REST?

Cet article sera utile.

Lors de l'utilisation d'un service Web RESTful C'est un service qui vous permet de faire référence à des ressources (données liées aux services WEB) en saisissant un URI dans un navigateur.

Il s'agit d'un mécanisme pratique pour partager des informations avec plusieurs logiciels dans un système distribué.

Qu'est-ce que tu veux faire

Le manuel Spring a une API qui renvoie du texte manuel de manière aléatoire. http://gturnquist-quoters.cfapps.io/api/random Cette consommation d'un service Web RESTful est une fonction permettant d'obtenir des données de cette API.

Créez une classe de devis (src / main / java / hello / Quote.java)

src/main/java/hello/Quote.java


package hello;

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

Qu'est-ce que «@ JsonIgnoreProperties»?

Ce qui suit est une citation du manuel.

As you can see, this is a simple Java class with a handful of properties and matching getter methods. It’s annotated with @JsonIgnoreProperties from the Jackson JSON processing library to indicate that any properties not bound in this type should be ignored

@ JsonIgnoreProperties est une annotation qui ignore une propriété si elle ne rentre pas dans le format JSON. Donc, en ajoutant cela, vous pouvez ignorer les données inutiles. Le service à connecter cette fois renvoie des données au format JSON, il semble donc y avoir une description qui lui correspond. Vous devez avoir les mêmes propriétés et noms que ceux renvoyés dans JSON.

Le contenu est un simple getter et setter.

méthode toString ()

Par défaut, la méthode toString () renvoie une chaîne qui représente la référence à l'objet, donc je la remplace. Vous essayez de renvoyer la valeur, qui est la phrase citée comme type (décrite plus loin).

Créez une classe de contenu de citation (src / main / java / hello / Value.java)

src/main/java/hello/Value.java


package hello;

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 + '\'' +
                '}';
    }
}

Le contenu du devis est classé en identifiants et les devis en classes. Il semble qu'ils le font pour ranger. Ceci est utilisé dans Quote.java.

Créer une classe pour l'exécution (Application.java)

src/main/java/hello/Application.java


package hello;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.client.RestTemplate;

public class Application {

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

    public static void main(String args[]) {
        RestTemplate restTemplate = new RestTemplate();
        Quote quote = restTemplate.getForObject("http://gturnquist-quoters.cfapps.io/api/random", Quote.class);
        log.info(quote.toString());
    }

}

Journal de sortie

Private static final Logger log = LoggerFactory.getLogger (Application.class); pour obtenir le journal et log.info (quote.toString ()); pour le sortir. Par défaut, il est émis vers la console.

Obtenir des données d'API à l'aide de RestTemplate

Vous obtenez des données JSON en spécifiant l'adresse avec Quote quote = restTemplate.getForObject (" http://gturnquist-quoters.cfapps.io/api/random ", Quote.class);.

Dans getForObject, Quote.class créé précédemment est défini dans le deuxième argument. Cela créera une nouvelle classe de devis basée sur les données JSON? Elle sera stockée dans la variable de devis. SetValue () de la classe Quote est-il également exécuté automatiquement à ce moment? Value.java est également nouveau et il semble que ce soit la valeur de Quote. Peut-être que le @JsonIgnoreProperties (ignoreUnknown = true) attaché aux deux classes est automatisé partout, mais je n'ai pas pu interpréter les détails. Si quelqu'un peut comprendre le comportement dans les coulisses, j'apprécierais que vous me donniez un message.

Utilisez Spring Boot

Étant donné que Spring Boot n'est pas utilisé jusqu'à présent, voici la méthode de description de Application.java lorsque Spring Boot est utilisé. Les avantages de l'utilisation de Spring Boot sont décrits ci-dessous.

One of the advantages is that we might want to let Spring Boot manage the message converters in the RestTemplate, so that customizations are easy to add declaratively.

En laissant Spring Boot gérer les convertisseurs de messages dans Rest Template, il devient possible d'ajouter une personnalisation déclarative. Il paraît que.

Créer une classe d'exécution pour Spring Boot

src/main/java/hello/Application.java


package hello;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class Application {

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

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

	@Bean
	public RestTemplate restTemplate(RestTemplateBuilder builder) {
		return builder.build();
	}

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

L'explication de ce code est la suivante.

The RestTemplateBuilder is injected by Spring, and if you use it to create a RestTemplate then you will benefit from all the autoconfiguration that happens in Spring Boot with message converters and request factories. We also extract the RestTemplate into a @Bean to make it easier to test (it can be mocked more easily that way).

C'est encore indéchiffrable dans mon état d'apprentissage. RestTemplateBuilder a Cet article: Utilisez RestTemplate (client HTTP) avec Spring Boot 1.4+ pour votre référence. En premier lieu, il est déraisonnable que cela soit soudainement expliqué à la prémisse de la connaissance comme le haricot même s'il n'y a rien sur la figuration ou le haricot autodon à ce stade. Ce manuel peut-il être systématisé? J'ai cherché la partie où l'explication de bean est répertoriée, mais je ne trouve pas la partie. N'y a-t-il pas d'autre choix que de le lire dans un livre?

Recommended Posts

Un voyage pour déchiffrer les «GUIDES» de Spring consommant une édition de service Web RESTful.
Un voyage pour déchiffrer l'édition des tâches de planification "GUIDES" de Spring.
Guide de démarrage de Spring Boot [Utilisation d'un service Web RESTful]
La voie de la création d'un service Web (partie 1)
J'ai essayé le guide d'introduction de Spring Boot [Création d'un service Web RESTful]
Trois raisons de frustration avant la sortie des services Web
Gorigori SIer SE a tenté de créer un service web par développement personnel