【Spring MVC】RestTemplateを使ったAPIアクセス(getForObjectの使い方)

概要

RestTemplate#getForObjectメソッドの基本的な使用方法についてまとめた。
動作確認を行うための事前準備については、以下に記載している。

あわせて読みたい

概要 RESTfulなAPIを呼ぶクライアントライブラリである、RestTemplateの概要についてまとめた。 RestTemplateを使用するための準備と、どんなメソッドがあるのかを紹介している。   前提 今[…]

【Spring MVC】RestTemplateの導入

 

基本的な使い方

RestTemplate#getForObjectメソッドは、指定したURIにGET通信を行ってレスポンスボディのみを取得するために使用する
メッセージコンバーターを内包するため、取得するレスポンスボディは指定した型(ジェネリクスを除く)にマッピングできる

 

実装方法

RestTemplate#getForObjectメソッドは、基本的に以下のように実装する。

getForObject(URI, 取得したいレスポンスの型)

 

使用例

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 resJson = restClient.getJson(uri, String.class);

戻り値にString型を指定する。

 

コンソール


{"id":"1","name":"りんご","hogeDate":"2025-02-01"}

 

オブジェクト

戻り値にResourceクラスを指定する。

 

動作確認用クラス


Resource resource = restClient.getJson(uri, Resource.class);
System.out.println(resource);

 

Resource resource = restClient.getJson(uri, Resource.class);

戻り値に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));
	}
}

 

Resource[] resourceArr = restClient.getJson(uri, Resource[].class);

複数件取得したい場合、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ではなく配列を指定する必要があるので注意

 

スポンサーリンク