Je publie des informations sur un service Web à l'aide de RestTemplate.postForObject. Outre la chaîne de résultat, j'ai besoin des informations contenues dans l'en-tête de la réponse. Y a-t-il un moyen d'obtenir ceci?
RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);
Ok, j'ai finalement compris. La méthode d'échange est exactement ce dont j'ai besoin. Il retourne une HttpEntity qui contient les en-têtes complets.
RestTemplate template = new RestTemplate();
HttpEntity<String> response = template.exchange(url, HttpMethod.POST, request, String.class);
String resultString = response.getBody();
HttpHeaders headers = response.getHeaders();
La meilleure chose à faire serait d’utiliser la méthode execute et de passer un ResponseExtractor qui aura accès aux en-têtes.
private static class StringFromHeadersExtractor implements ResponseExtractor<String> {
public String extractData(ClientHttpResponse response) throws
{
return doSomthingWithHeader(response.getHeaders());
}
}
Une autre option (moins propre) consiste à étendre RestTemplate, à remplacer l'appel par doExecute
et à y ajouter toute logique de traitement d'en-tête spéciale.
Je ne sais pas si cette méthode est recommandée, mais il semble que vous puissiez extraire des informations des en-têtes de réponse si vous configurez le modèle pour qu'il utilise un HttpMessageConverter
personnalisé.
HttpEntity<?> entity = new HttpEntity<>( postObject, headers ); // for request
HttpEntity<String> response = template.exchange(url, HttpMethod.POST, entity, String.class);
String result= response.getBody();
HttpHeaders headers = response.getHeaders();