RestTemplate使い方

今回は、RestTemplateについて調べてみたいと思います。

RestTemplateとは

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

RestTemplateの動作

  1. アプリケーションがRestTemplateを生成し、URI、HTTPメソッドなどの情報をヘッダーに追加してリクエストします。
  2. RestTemplateはHttpMessageConverterを使用してrequestEntityをリクエストメッセージに変換します。
  3. RestTemplateはClientHttpRequestFactoryからClientHttpRequestを取得してリクエストを投げます。
  4. ClientHttpRequestはリクエストメッセージを作成してHTTPプロトコルを使ってサーバーと通信します。
  5. RestTemplateはResponseErrorHandlerでエラーを確認しているのであれば、処理ロジックを実行します。
  6. ResponseErrorHandlerはエラーがある場合、ClientHttpResponseからレスポンスデータを取得して処理します。
  7. RestTemplateはHttpMessageConverterを利用してレスポンスメッセージをJava Object(Class responseType)に変換します。
  8. アプリケーションに返却します。

主なメソッド

  • 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

引数順説明
1String送信先のURI
2Class<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

引数順説明
1String送信先のURI
2Object送信する値(パラメータ)
3Class<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だけみてみました。

業務ではバッチでは使った経験がありますが、それ以外はないですね。

コメントを残す