Для чего нужен метод 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());
}
Ответы
Ответ 1
Документация по методу довольно проста:
Выполните метод HTTP для данного шаблона URI, записав данный объект запроса в запрос и вернув ответ как ResponseEntity
.
Переменные шаблона URI раскрываются с использованием заданных переменных URI, если таковые имеются.
Рассмотрим следующий код, извлеченный из вашего собственного вопроса:
ResponseEntity<byte[]> result =
restTemplate.exchange("http://localhost:7070/spring-rest-provider/krams/person/{id}",
HttpMethod.GET, entity, byte[].class, id);
У нас есть следующее:
-
GET
запрос будет выполнен к указанному URL-адресу, отправив заголовки HTTP, заключенные в экземпляр HttpEntity
. - Данный URL содержит переменную шаблона (
{id}
). Он будет заменен значением, указанным в последнем параметре метода (id
). -
ResponseEntity
объект будет возвращен в виде byte[]
заключенного в экземпляр ResponseEntity
.
Ответ 2
Метод обмена выполняет метод HTTP против указанного шаблона URI, передавая параметры для замены. В этом случае он получает изображение для объекта пользователя для его параметра Id и возвращает для него массив байтов.
Ответ 3
Для более общего API обмена требуются параметр HttpMethod и объект запроса для полноты. Для сравнения:
ResponseEntity<Foo> response =
restTemplate.exchange(url, HttpMethod.GET, request, Foo.class);
ResponseEntity<Foo> response =
restTemplate.getForEntity(url, Foo.class);