Spring入門コンテンツ Consuming Rest(RESTful Web サービスの使用)をインポートする方法と解説


ここでは、
Spring入門コンテンツ「Consuming Rest(RESTful Web サービスの使用)」をインポートする方法と、このコンテンツについて、紹介します。

動作環境


以下の環境に入門コンテンツをインポートしました。

・Windows10 64bit

・Eclipse 2018-12(Eclipse 4.10)

・Java 8

・Spring Boot 2.1.3(Spring Tool Suite 4)

※下記の記事で構築した開発環境を利用

Spring Tool Suite 4の開発環境構築(Eclipseにインストール)|STS4

入門コンテンツのインポート

まず、Eclipseで「ファイル」>「新規」>「Spring 入門コンテンツのインポート」を選択します。


次に、「入門コンテンツのインポート」画面で「Consuming Rest」を選択して、「完了」ボタンをクリックして、インポートします。

・ビルドタイプ

Maven

・コードセット

完了をチェック(プロジェクト「gs-consuming-rest-complete」をインポート)


最後に、入門コンテンツ「Consuming Rest」がインポートされたことを確認します。



Consuming Rest(RESTful Web サービスの使用)

この入門コンテンツでは、SpringのRestTemplateを使用して、Web ページ・データを取得する方法を学習します。

RestTemplateについて

Springは、RestTemplateと呼ばれるテンプレートクラスを提供しています。

RestTemplateを使用して、RESTful WEB サービスを利用するアプリケーションを作成することができます。

RestTemplateは、RESTfulサービスとのやり取りを1行で済ませることができ、さらに、取得したデータをカスタムドメインタイプにバインドすることができます。

RESTfulサービス

この入門コンテンツでは、以下のURLで立ち上がっているRESTfulサービスを使用しています。SpringのRestTemplateを使用して、このRESTfulサービスからJSONドキュメントを取得するアプリケーションを作成しています。

・RESTfulサービス


WEBブラウザ、またはcurlで、このURLをリクエストすると、以下のようなJSONドキュメントが表示されます。

{
    "type":"success",
    "value":{
        "id":8,
        "quote":"I don't worry about my code scaling. Boot allows the developer to peel back the layers and customize when it's appropriate while keeping the conventions that just work."
    }
}

Spring Boot アプリケーションの実行

「gs-consuming-rest-complete」を右クリックして、「実行」>「Spring Boot App」を選択します。


Spring Boot アプリケーションを実行すると、RESTfulサービスからJSONデータを取得して、Quoteオブジェクトにコンバートします。

このQuoteオブジェクトの内容をコンソールに出力していますので、以下の出力情報を確認して、実行結果を確認します。

・出力情報

2019-04-23 14:05:11.183  INFO 8252 --- [           main] hello.Application                        : Quote{type='success', value=Value{id=2, quote='With Boot you deploy everywhere you can find a JVM basically.'}}

アプリケーション(Application)

・アプリケーションクラス(RESTクライアント)

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(
                    "https://gturnquist-quoters.cfapps.io/api/random", Quote.class);
            log.info(quote.toString());
        };
    }
}

mainメソッド

パラメータ
    args - String配列(要素数0)

戻り値
    なし

Spring Boot アプリケーションを実行すると、SpringApplication.runメソッドが実行されて、アプリケーションが起動します。

restTemplateメソッド

パラメータ
    builder - RestTemplateBuilderオブジェクト

戻り値
    RestTemplateオブジェクト

RestTemplateBuilderを使用して、RestTemplateを生成します。

生成したRestTemplateオブジェクトを返します。

* RestTemplateBuilderは、Springによってインジェクトされています。

runメソッド

パラメータ
    restTemplate - RestTemplateオブジェクト

戻り値
    CommandLineRunner

SpringApplication.runメソッドを実行すると、このApplication.runメソッドが実行されます。

RestTemplateを使用して、RESTfulサービスからJSONデータを取得して、Quoteオブジェクトにコンバートします。そして、Quoteオブジェクトの内容をコンソールに出力します。

* RestTemplate(HttpMessageConverterインターフェース)は、クラスパス上にあるJackson JSONライブラリを使用して、取得したJSONデータをQuoteオブジェクトにコンバートします。

* ここでは、RestTemplateを使用して、HTTP GETリクエストを作成していますが、POST、PUT、DELETEなど、他のリクエストもサポートしています。

* Applicationクラスは、容易にテストできるようなコーティングになっています。(簡単にモックできます)

ドメインクラス(Quoteクラス)

・Quoteクラス

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 +
                '}';
    }
}
Quoteクラスは、取得したJSONデータがセットされます。

@JsonIgnoreProperties(ignoreUnknown = true)

ドメインクラスにバインドされないJSONドキュメントのプロパティは無視することを示すために、Jackson JSONライブラリの @JsonIgnorePropertiesを付与しています。

ドメインクラスの変数名は、APIから返されたJSONドキュメント内のキーとまったく同じ変数名を指定して、JSONデータをドメインクラスに直接バインドしています。

ドメインクラスの変数名とJSONドキュメント内のキーが一致しない場合、@JsonPropertyを使用して、JSONドキュメント内のキーを指定する必要があります。

ドメインクラス(Valueクラス)

・Valueクラス

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

Valueクラスは、取得したJSONデータのネストされたフィールドのデータがセットされます。

@JsonIgnoreProperties(ignoreUnknown = true)

上記、ドメインクラス(Quote)と同様。

参考



スポンサーリンク

0 件のコメント :

コメントを投稿