Consuming a RESTful Web Service
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é.
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.
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 +
'}';
}
}
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.
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).
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.
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());
}
}
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.
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.
É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.
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