Comment lire l'en-tête de réponse de RestTemplate?
-
14-11-2019 - |
Question
Je publie des informations sur un service Web à l'aide de RestTemplate.PostForObject. Outre la chaîne de résultats, j'ai besoin des informations dans l'en-tête de réponse. Existe-t-il un moyen d'obtenir cela?
RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);
La solution
Ok, je l'ai finalement compris. La méthode d'échange est exactement ce dont j'ai besoin. Il renvoie 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();
Autres conseils
La meilleure chose à faire devrait être d'utiliser le exécuter méthode et passer dans un Responsextractor 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 le repos et à remplacer l'appel à doExecute
et ajoutez toute logique de gestion de l'en-tête spéciale là-bas.
Je ne sais pas si c'est la méthode 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 utiliser une personnalité HttpMessageConverter
.
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();