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);
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();
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.
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.
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();