En fait, que fait la méthode 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());
}
La documentation de la méthode est assez simple:
Exécutez la méthode HTTP sur le modèle d'URI donné en écrivant l'entité de demande donnée dans la demande et renvoie la réponse sous la forme
ResponseEntity
.Les variables de modèle d'URI sont développées à l'aide des variables d'URI données, le cas échéant.
Considérons le code suivant extrait de votre question:
ResponseEntity<byte[]> result =
restTemplate.exchange("http://localhost:7070/spring-rest-provider/krams/person/{id}",
HttpMethod.GET, entity, byte[].class, id);
Nous avons les éléments suivants:
GET
sera effectuée sur l'URL donnée, en envoyant les en-têtes HTTP encapsulés dans l'instance HttpEntity
. {id}
), elle sera remplacée par la valeur indiquée dans le dernier paramètre de la méthode (id
).byte[]
encapsulé dans une instance ResponseEntity
.La méthode Exchange exécute la méthode HTTP sur le modèle d'URI spécifié, en transmettant les paramètres à remplacer. Dans ce cas, il obtient une image pour une entité personne pour son paramètre Id et renvoie le tableau d'octets correspondant.
L'API d'échange plus générique nécessite un paramètre HttpMethod et un objet de requête pour être complet. Comparer:
ResponseEntity<Foo> response =
restTemplate.exchange(url, HttpMethod.GET, request, Foo.class);
ResponseEntity<Foo> response =
restTemplate.getForEntity(url, Foo.class);