web-dev-qa-db-ja.com

restTemplate.exchange()メソッドの目的は何ですか?

実際、restTemplate.exchange()メソッドは何をしますか?

@RequestMapping(value = "/getphoto", method = RequestMethod.GET)
public void getPhoto(@RequestParam("id") Long id, HttpServletResponse response) {

    logger.debug("Retrieve photo with id: " + id);

    // Prepare acceptable media type
    List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
    acceptableMediaTypes.add(MediaType.IMAGE_JPEG);

    // Prepare header
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(acceptableMediaTypes);
    HttpEntity<String> entity = new HttpEntity<String>(headers);

    // Send the request as GET
    ResponseEntity<byte[]> result = 
        restTemplate.exchange("http://localhost:7070/spring-rest-provider/krams/person/{id}", 
                              HttpMethod.GET, entity, byte[].class, id);

    // Display the image
    Writer.write(response, result.getBody());
}
22
sneha

メソッドのドキュメント は非常に簡単です:

指定されたURIテンプレートに対してHTTPメソッドを実行し、指定された要求エンティティを要求に書き込み、応答を ResponseEntity として返します。

URIテンプレート変数は、指定されたURI変数があればそれを使用して展開されます。


独自の質問から抽出した次のコードを検討してください。

ResponseEntity<byte[]> result = 
    restTemplate.exchange("http://localhost:7070/spring-rest-provider/krams/person/{id}", 
                          HttpMethod.GET, entity, byte[].class, id);

次のものがあります。

  • GET リクエストは、 HttpEntity インスタンスにラップされたHTTPヘッダーを送信する特定のURLに対して実行されます。
  • 指定されたURLにはテンプレート変数({id})が含まれています。最後のメソッドパラメーター(id)で指定された値に置き換えられます。
  • 応答エンティティは、 ResponseEntity インスタンスにラップされたbyte[]として返されます。
17
cassiomolin

Exchangeメソッドは、指定されたURIテンプレートに対してHTTPメソッドを実行し、置換用のパラメーターを渡します。この場合、Idパラメーターの人物エンティティの画像を取得し、そのバイト配列を返します。

0
Matt T.

より汎用的な交換APIには、完全性のためにHttpMethodパラメーターと要求オブジェクトが必要です。比較する:

ResponseEntity<Foo> response = 
restTemplate.exchange(url, HttpMethod.GET, request, Foo.class);

ResponseEntity<Foo> response = 
restTemplate.getForEntity(url, Foo.class);
0
Gapmeister66