今回は、RestTemplateについて調べてみたいと思います。
RestTemplateとは
- REST API(Web API)を呼び出すためのメソッドを提供するクラスです。
- Spring 3.0から提供しています。
- http通信を簡単にやってくれるテンプレートです。
- RESTful原則を守ります。
- json、xmlのレスポンスを簡単に受信できます。
RestTemplateの動作

- アプリケーションがRestTemplateを生成し、URI、HTTPメソッドなどの情報をヘッダーに追加してリクエストします。
- RestTemplateはHttpMessageConverterを使用してrequestEntityをリクエストメッセージに変換します。
- RestTemplateはClientHttpRequestFactoryからClientHttpRequestを取得してリクエストを投げます。
- ClientHttpRequestはリクエストメッセージを作成してHTTPプロトコルを使ってサーバーと通信します。
- RestTemplateはResponseErrorHandlerでエラーを確認しているのであれば、処理ロジックを実行します。
- ResponseErrorHandlerはエラーがある場合、ClientHttpResponseからレスポンスデータを取得して処理します。
- RestTemplateはHttpMessageConverterを利用してレスポンスメッセージをJava Object(Class responseType)に変換します。
- アプリケーションに返却します。
主なメソッド
- execute(Any HTTPメソッド)
- exchange(Any HTTPメソッド)
- ヘッダーにセットしてHTTP MethodにリクエストしてResponseEntityを受信します。
- getForObject(GETメソッド)
- getリクエストを送ってjava objectでマッピングされたレスポンスを受信します。
- getForEntity(GETメソッド)
- getリクエストを送り、ResponseEntityを受信します。
- postForLocation(POSTメソッド)
- post リクエストを送り、java.net.URIを受信します。
- postForObject(POSTメソッド)
- postリクエストを送り、ResponseEntityを受信します。
- put(PUTメソッド)
- delete(DELETEメソッド)
- headForHeaders(HEADメソッド)
- optionsForAllow(OPTIONSメソッド)
使い方
GET
| 引数順 | 型 | 説明 |
|---|---|---|
| 1 | String | 送信先のURI |
| 2 | Class<T> | 送信先から返却されたResponseBodyをバインドするクラス |
public class TestClass {
@Autowired
private RestTemplate restTemplate;
public static final String INFO_URI = "http://localhost:8080/info";
public void getInfo() {
restTemplate.getForObject(URI, レスポンス型.class);
}
}
- restTemplate.getForObject:HTTP GETメソッドを呼び出します。
- パラメータとしてはURIとレスポンスのバインドクラスです。
POST
| 引数順 | 型 | 説明 |
|---|---|---|
| 1 | String | 送信先のURI |
| 2 | Object | 送信する値(パラメータ) |
| 3 | Class<T> | 送信先から返却されたResponseBodyをバインドするクラス |
public class TestClass {
@Autowired
private RestTemplate restTemplate;
public static final String INFO_URI = "http://localhost:8080/info";
public void getInfo() {
restTemplate.postForObject(URI, パラメータ, レスポンス型.class);
}
}
終わりに
putやdeleteなどもありますが、使い方としては似ているものなので、getとpostだけみてみました。
業務ではバッチでは使った経験がありますが、それ以外はないですね。
