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);
Était-ce utile?

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top