概要
RestTemplate#getForObjectメソッドの基本的な使用方法についてまとめた。
動作確認を行うための事前準備については、以下に記載している。
概要 RESTfulなAPIを呼ぶクライアントライブラリである、RestTemplateの概要についてまとめた。 RestTemplateを使用するための準備と、どんなメソッドがあるのかを紹介している。 前提 今[…]
基本的な使い方
RestTemplate#getForObjectメソッドは、指定したURIにGET通信を行ってレスポンスボディのみを取得するために使用する。
メッセージコンバーターを内包するため、取得するレスポンスボディは指定した型(ジェネリクスを除く)にマッピングできる。
実装方法
RestTemplate#getForObjectメソッドは、基本的に以下のように実装する。
使用例
APIアクセスクラスにgetForObjectメソッドを追加し、動作確認を行う。
APIアクセスクラス
URIと任意のオブジェクトを指定して呼び出す。
RestClient.java
package com.example.client_prototype.biz;
import java.net.URI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
@Component
public class RestClient {
@Autowired
private RestTemplate restTemplate;
/**
* getForObjectの利用
* @param <T>
* @param uri
* @param responseType
* @return
*/
public <T> T getJson(URI uri, Class<T> responseType) {
return restTemplate.getForObject(uri, responseType);
}
}
動作確認
戻り値を指定して動作確認を行う。
文字列
戻り値にStringを指定する。
動作確認用クラス
public static void main(String[] args) {
try (var context = new ClassPathXmlApplicationContext("/META-INF/spring/applicationContext.xml")) {
// DIコンテナから取得
var restClient = context.getBean(RestClient.class);
// URI定義
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080/rest_prototype/rest01/{id}")
.buildAndExpand(1)
.toUri();
// 動作確認
String resJson = restClient.getJson(uri, String.class);
System.out.println(resJson);
}
}
戻り値にString型を指定する。
コンソール
{"id":"1","name":"りんご","hogeDate":"2025-02-01"}
オブジェクト
戻り値にResourceクラスを指定する。
動作確認用クラス
Resource resource = restClient.getJson(uri, Resource.class);
System.out.println(resource);
戻り値にResource型を指定する。
コンソール
Resource(id=1, name=りんご, hogeDate=2025-02-01)
配列
戻り値にResource[]を指定する。
動作確認用クラス
public static void main(String[] args) {
try (var context = new ClassPathXmlApplicationContext("/META-INF/spring/applicationContext.xml")) {
// DIコンテナから取得
var restClient = context.getBean(RestClient.class);
// URI定義
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080/rest_prototype/rest05/")
.build()
.toUri();
// 動作確認
Resource[] resourceArr = restClient.getJson(uri, Resource[].class);
Arrays.asList(resourceArr).forEach(r -> System.out.println(r));
}
}
複数件取得したい場合、Listは指定できないので注意(ジェネリクスを含むため指定できない)。
配列なら指定可能。
コンソール
Resource(id=1, name=りんご, hogeDate=2025-02-01)
Resource(id=2, name=ごりら, hogeDate=2024-06-05)
Resource(id=3, name=らっぱ, hogeDate=2023-05-10)
まとめ
☑ getForObjectを使用することで、GETリクエストを送信してレスポンスボディのみを取得することができる
☑ レスポンスボディは任意の型を指定できる
☑ 複数件取得したい場合、Listではなく配列を指定する必要があるので注意