[JAVA] Eine Reise, um Spring's "GUIDES" zu entschlüsseln, die eine RESTful Web Service Edition verbrauchen.

Consuming a RESTful Web Service

Was ist REST?

Dieser Artikel ist hilfreich.

Beim Konsumieren eines RESTful-Webdienstes Es ist ein Dienst, mit dem Sie auf Ressourcen (Daten im Zusammenhang mit WEB-Diensten) verweisen können, indem Sie einen URI in einen Browser eingeben.

Dies ist ein praktischer Mechanismus zum Teilen von Informationen mit mehreren Softwareprogrammen in einem verteilten System.

Was möchten Sie tun

Das Federhandbuch verfügt über eine API, die zufällig manuellen Text zurückgibt. http://gturnquist-quoters.cfapps.io/api/random Dieser Verbrauch eines RESTful-Webdienstes ist eine Funktion zum Abrufen von Daten von dieser API.

Erstellen Sie eine Anführungszeichenklasse (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 +
                '}';
    }
}

Was ist "@ JsonIgnoreProperties"?

Das Folgende ist ein Zitat aus dem Handbuch.

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 ist eine Anmerkung, die eine Eigenschaft ignoriert, wenn sie nicht in das JSON-Format passt. Wenn Sie dies hinzufügen, können Sie unnötige Daten ignorieren. Der diesmal zu verbindende Dienst gibt Daten im JSON-Format zurück, sodass es sich anscheinend um eine entsprechende Beschreibung handelt. Sie müssen dieselben Eigenschaften und Namen haben, die in JSON zurückgegeben werden.

Der Inhalt ist ein einfacher Getter und Setter.

toString () -Methode

Standardmäßig gibt die toString () -Methode eine Zeichenfolge zurück, die den Verweis auf das Objekt darstellt, daher überschreibe ich sie. Sie versuchen, einen Wert zurückzugeben, bei dem es sich um den als Typ angegebenen Satz handelt (später beschrieben).

Erstellen Sie eine Zitierinhaltsklasse (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 + '\'' +
                '}';
    }
}

Der Inhalt des Zitats wird in IDs und Zitate in Klassen eingeteilt. Es scheint, dass sie es tun, um aufzuräumen. Dies wird in Quote.java verwendet.

Erstellen Sie eine Klasse zur Ausführung (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());
    }

}

Ausgabeprotokoll

private static final Logger log = LoggerFactory.getLogger (Application.class); um das Protokoll abzurufen und log.info (quote.toString ()); um es auszugeben. Standardmäßig wird es an die Konsole ausgegeben.

Abrufen von Daten von der API mithilfe von RestTemplate

Sie erhalten JSON-Daten, indem Sie die Adresse mit "Quote quote = restTemplate.getForObject (" http://gturnquist-quoters.cfapps.io/api/random ", Quote.class)" angeben.

In getForObject wird die zuvor erstellte Quote.class im zweiten Argument festgelegt. Dadurch wird eine neue Angebotsklasse basierend auf den JSON-Daten erstellt. Diese wird in der Angebotsvariablen gespeichert. Wird setValue () der Quote-Klasse zu diesem Zeitpunkt ebenfalls automatisch ausgeführt? Value.java ist ebenfalls neu und es scheint, dass es der Wert von Quote ist. Vielleicht automatisieren sich die an beide Klassen angehängten "@JsonIgnoreProperties (ignoreUnknown = true)" überall, aber ich konnte die Details nicht interpretieren. Wenn jemand das Verhalten hinter den Kulissen verstehen kann, würde ich es begrüßen, wenn Sie mir eine Nachricht geben könnten.

Verwenden Sie Spring Boot

Da Spring Boot bisher nicht verwendet wird, ist die folgende Beschreibungsmethode von Application.java, wenn Spring Boot verwendet wird. Die Vorteile der Verwendung von Spring Boot werden wie folgt beschrieben.

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.

Wenn Spring Boot die Nachrichtenkonverter in Rest Template verwaltet, können deklarative Anpassungen hinzugefügt werden. Es scheint, dass.

Erstellen Sie eine Ausführungsklasse für 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());
		};
	}
}

Die Erklärung für diesen Code lautet wie folgt.

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).

Dies ist in meinem Lernzustand immer noch nicht zu entziffern. RestTemplateBuilder hat diesen Artikel: Verwenden Sie RestTemplate (HTTP-Client) mit Spring Boot 1.4+ als Referenz. Erstens ist es unvernünftig, dass es plötzlich der Wissensvoraussetzung wie Bohne erklärt wird, obwohl es an dieser Stelle nichts über Autodon-Figuration oder Bohne gibt. Kann dieses Handbuch systematisiert werden? Ich habe nach dem Teil gesucht, in dem die Erklärung der Bohne aufgeführt ist, aber ich kann den Teil nicht finden. Gibt es keine andere Wahl, als es in einem Buch zu lesen?

Recommended Posts

Eine Reise, um Spring's "GUIDES" zu entschlüsseln, die eine RESTful Web Service Edition verbrauchen.
Eine Reise zur Entschlüsselung von Spring's "GUIDES" Scheduling Tasks Edition.
Spring Boot Erste Schritte [Konsumieren eines RESTful-Webdienstes]
Der Weg zum Erstellen eines Webdienstes (Teil 1)
Ich habe das Spring Boot-Einführungshandbuch [Erstellen eines RESTful-Webdiensts] ausprobiert.
Drei Gründe für Frustration vor der Veröffentlichung von Web Services
Gorigori SIer SE hat versucht, durch persönliche Entwicklung einen Webdienst zu erstellen