39 votes

Comment lire l'en-tête de réponse de RestTemplate ?

J'envoie des informations à un service web en utilisant RestTemplate.postForObject. En plus de la chaîne de résultat, j'ai besoin des informations contenues dans l'en-tête de la réponse. Existe-t-il un moyen d'obtenir ces informations ?

RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);

66voto

Eric Milas Points 496

Ok, j'ai enfin trouvé la solution. La méthode d'échange est exactement ce dont j'ai besoin. Elle 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();

9voto

Andrew White Points 23508

La meilleure chose à faire est d'utiliser la fonction exécuter et transmet 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 et à surcharger l'appel à doExecute et d'y ajouter toute logique spéciale de gestion des en-têtes.

3voto

Deepak Points 71
  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();

1voto

Stephen C Points 255558

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 qu'il utilise un fichier HttpMessageConverter .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X