webentwicklung-frage-antwort-db.com.de

Wie lese ich den Antwortheader von RestTemplate?

Ich gebe mit RestTemplate.postForObject Informationen an einen Webservice. Neben der Ergebniszeichenfolge benötige ich die Informationen im Antwortheader. Gibt es eine Möglichkeit, das zu bekommen?

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

Ok, ich habe es endlich herausgefunden. Die Austauschmethode ist genau das, was ich brauche. Es gibt eine HttpEntity zurück, die die vollständigen Header enthält.

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

Am besten sollten Sie die execute -Methode verwenden und einen ResponseExtractor übergeben, der Zugriff auf die Header hat.

private static class StringFromHeadersExtractor implements ResponseExtractor<String> {

    public String extractData(ClientHttpResponse response) throws   
    {
        return doSomthingWithHeader(response.getHeaders());
    }
}

Eine weitere Option (weniger sauber) besteht darin, RestTemplate zu erweitern, den Aufruf von doExecute zu überschreiben und dort eine spezielle Header-Verarbeitungslogik hinzuzufügen.

8
Andrew White

Ich weiß nicht, ob dies die empfohlene Methode ist, aber es scheint, als könnten Sie Informationen aus den Antwortheadern extrahieren, wenn Sie die Vorlage für die Verwendung einer benutzerdefinierten HttpMessageConverter konfigurieren.

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