このガイドでは、RESTful Web サービスを使用するアプリケーションを作成するプロセスを順を追って説明します。
構築するもの
Spring の RestTemplate
を使用して、https://gturnquist-quoters.cfapps.io/api/random (英語) でランダムな Spring Boot の引用を取得するアプリケーションを作成します。
必要なもの
約 15 分
お気に入りのテキストエディターまたは IDE
コードを直接 IDE にインポートすることもできます。
このガイドを完了する方法
ほとんどの Spring 入門ガイドと同様に、最初から始めて各ステップを完了するか、すでに慣れている場合は基本的なセットアップステップをバイパスできます。いずれにしても、最終的に動作するコードになります。
最初から始めるには、Spring Initializr から開始に進みます。
基本をスキップするには、次の手順を実行します。
このガイドのソースリポジトリをダウンロードして解凍するか、Git (英語) を使用してクローンを作成します。
git clone https://github.com/spring-guides/gs-consuming-rest.git (英語)
gs-consuming-rest/initial
に cdREST リソースの取得にジャンプしてください。
完了したときは、gs-consuming-rest/complete
のコードに対して結果を確認できます。
Spring Initializr から開始
すべての Spring アプリケーションでは、Spring Initializr (英語) から始めることができます。Initializr は、アプリケーションに必要なすべての依存関係をすばやく取り込む方法を提供し、多くの設定を行います。この例は Web アプリケーションにすぎないため、Web 依存関係のみを含める必要があります。
次のリストは、Maven を選択したときに作成される pom.xml
ファイルを示しています。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>consuming-rest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>consuming-rest</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
次のリストは、Gradle を選択したときに作成される build.gradle
ファイルを示しています。
plugins {
id 'org.springframework.boot' version '2.4.1'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
spring-boot-starter-web
には、JSON を操作するために必要な Jackson クラスなど、Web アプリケーションを構築するために必要なものがすべて含まれているため、これらのビルドファイルはこのように簡単になります。
REST リソースの取得
プロジェクトのセットアップが完了すると、RESTful サービスを使用する単純なアプリケーションを作成できます。
RESTful サービスが https://gturnquist-quoters.cfapps.io/api/random (英語) で立ち上がっています。Spring Boot に関する引用をランダムに取得し、JSON ドキュメントとして返します。
Web ブラウザーまたは curl を介してその URL をリクエストすると、次のような JSON ドキュメントを受け取ります。
{
type: "success",
value: {
id: 10,
quote: "Really loving Spring Boot, makes stand alone Spring apps easy."
}
}
これは十分に簡単ですが、ブラウザーや curl を介して取得する場合は、それほど便利ではありません。
REST Web サービスを利用するより便利なメソッドは、プログラムを使用することです。そのタスクを支援するために、Spring は RestTemplate
(Javadoc) と呼ばれる便利なテンプレートクラスを提供します。RestTemplate
は、ほとんどの RESTful サービスとの対話を 1 行の呪文にします。また、そのデータをカスタムドメインタイプにバインドすることもできます。
まず、必要なデータを含むドメインクラスを作成する必要があります。次のリストは、ドメインクラスとして使用できる Quote
クラスを示しています。
src/main/java/com/example/consumingrest/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 +
'}';
}
}
この単純な Java クラスには、いくつかのプロパティと一致する getter メソッドがあります。Jackson JSON 処理ライブラリの @JsonIgnoreProperties
でアノテーションが付けられ、このタイプにバインドされていないプロパティは無視する必要があることを示します。
データをカスタムタイプに直接バインドするには、API から返された JSON ドキュメントのキーとまったく同じになるように変数名を指定する必要があります。JSON ドキュメントの変数名とキーが一致しない場合、@JsonProperty
アノテーションを使用して JSON ドキュメントの正確なキーを指定できます。(この例では、各変数名を JSON キーに一致させるため、ここでそのアノテーションは必要ありません。)
内部引用自体を埋め込むために、追加のクラスも必要です。Value
クラスはそのニーズを満たすものであり、次のリスト(src/main/java/com/example/consumingrest/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 + '\'' +
'}';
}
}
これは同じアノテーションを使用しますが、他のデータフィールドにマップします。
アプリケーションの終了
Initalizr は、main()
メソッドでクラスを作成します。次のリストは、Initializr が(src/main/java/com/example/consumingrest/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);
}
}
次に、他のいくつかを ConsumingRestApplication
クラスに追加して、RESTful ソースからの引用を表示する必要があります。以下を追加する必要があります。
ログ(この例ではコンソール)に出力を送信するロガー。
Jackson JSON 処理ライブラリを使用して受信データを処理する
RestTemplate
。起動時に
RestTemplate
を実行する(その結果、引用を取得する)CommandLineRunner
。
次のリストは、完成した ConsumingRestApplication
クラス(src/main/java/com/example/consumingrest/ConsumingRestApplication.java
で)を示しています。
package com.example.consumingrest;
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 ConsumingRestApplication {
private static final Logger log = LoggerFactory.getLogger(ConsumingRestApplication.class);
public static void main(String[] args) {
SpringApplication.run(ConsumingRestApplication.class, args);
}
@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());
};
}
}
アプリケーションの実行
コマンドラインから Gradle または Maven を使用してアプリケーションを実行できます。必要なすべての依存関係、クラス、リソースを含む単一の実行可能 JAR ファイルを構築して実行することもできます。実行可能な jar を構築すると、開発ライフサイクル全体、さまざまな環境などで、アプリケーションとしてサービスを簡単に提供、バージョン管理、デプロイできます。
Gradle を使用する場合、./gradlew bootRun
を使用してアプリケーションを実行できます。または、次のように、./gradlew build
を使用して JAR ファイルをビルドしてから、JAR ファイルを実行できます。
Maven を使用する場合、./mvnw spring-boot:run
を使用してアプリケーションを実行できます。または、次のように、./mvnw clean package
で JAR ファイルをビルドしてから、JAR ファイルを実行できます。
ここで説明する手順は、実行可能な JAR を作成します。クラシック WAR ファイルを作成することもできます。 |
次のような出力が表示されますが、ランダムな引用が表示されます。
2019-08-22 14:06:46.506 INFO 42940 --- [ main] c.e.c.ConsumingRestApplication : Quote{type='success', value=Value{id=1, quote='Working with Spring Boot is like pair-programming with the Spring developers.'}}
Could not extract response: no suitable HttpMessageConverter found for response type [class com.example.consumingrest.Quote] というエラーが表示された場合は、バックエンドサービスに接続できない環境にいる可能性があります (接続できれば JSON が送信されます)。もしかしたら、企業のプロキシの後ろにいるかもしれません。http.proxyHost と http.proxyPort のシステムプロパティを環境に適した値に設定してみてください。 |
要約
おめでとう! Spring Boot を使用して、簡単な REST クライアントを開発しました。
関連事項
次のガイドも役立ちます。
新しいガイドを作成したり、既存のガイドに貢献したいですか? 投稿ガイドラインを参照してください: GitHub (英語) 。
すべてのガイドは、コード用の ASLv2 ライセンス、およびドキュメント用の Attribution、NoDerivatives クリエイティブコモンズライセンス (英語) でリリースされています。 |