web-dev-qa-db-ja.com

RestTemplate:exchange()vs postForEntity()vs execute()

私はSpringブートを使用してREST APIに取り組んでおり、アプリケーションのエンドポイントにアクセスする必要がありました。 RestTemplateを使用しました。私は2つの方法を使用してそれを行うことができました、

  • postForEntity()

    _responseEntity = 
        restTemplate.postForEntity(uri, httpEntity, ResponseClass.class);
    _
  • exchange()

    _responseEntity = 
        restTemplate.exchange(uri, HttpMethod.POST, httpEntity, ResponseClass.class);
    _

これら2つの方法の使用法と違いを知りたいです。

また、別のメソッドexecute()も表示されます。少し光を当ててください。いつどのように使用するか。

8
Praveen Kumar

RestTemplate は、HTTP要求を実行するsynchronousクライアントです。頻度の低いケースをサポートする一般化されたexchange(...)およびexecute(...)メソッドに加えて、各HTTPメソッドの一般的なシナリオのテンプレートを提供します。

Spring Integration documentation は、各メソッドの使用法をまとめたものです:

postForEntity

POSTを介して新しいリソースを作成し、応答から表現を返します。

exchange

必要に応じて柔軟性を高める上記のメソッドのより一般化された、あまり意見のないバージョン。 HTTPメソッド、URL、ヘッダー、本文を含むRequestEntityを入力として受け入れ、ResponseEntityを返します。

これらのメソッドでは、ParameterizedTypeReferenceの代わりにClassを使用して、ジェネリックで応答タイプを指定できます。

execute

コールバックインターフェイスを介した要求の準備と応答の抽出を完全に制御して、要求を実行する最も一般的な方法。


最後に、postForEntity(...)exchange(...)、およびexecute(...)の両方のメソッドは、保護された doExecute(...) メソッドを呼び出します。実際のHTTPリクエストを実行します。詳細については、 ソースコード を確認してください。

5
cassiomolin

PostForEntityメソッドとexchangeメソッドの両方の実装を見ると、両方が背後でexecuteメソッドを使用していることがわかります。 exchangeメソッドを使用すると、さまざまなhttpメソッドをより自由に呼び出すことができます。

0
ksadjad