web-dev-qa-db-fra.com

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

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);
26
Eric Milas

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();
46
Eric Milas

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.

8
Andrew White

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é.

1
Stephen C
  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();
0
Deepak