実際、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());
}
メソッドのドキュメント は非常に簡単です:
指定された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に対して実行されます。{id}
)が含まれています。最後のメソッドパラメーター(id
)で指定された値に置き換えられます。ResponseEntity
インスタンスにラップされたbyte[]
として返されます。Exchangeメソッドは、指定されたURIテンプレートに対してHTTPメソッドを実行し、置換用のパラメーターを渡します。この場合、Idパラメーターの人物エンティティの画像を取得し、そのバイト配列を返します。
より汎用的な交換APIには、完全性のためにHttpMethodパラメーターと要求オブジェクトが必要です。比較する:
ResponseEntity<Foo> response =
restTemplate.exchange(url, HttpMethod.GET, request, Foo.class);
ResponseEntity<Foo> response =
restTemplate.getForEntity(url, Foo.class);