¿Cómo leo el encabezado de respuesta de RestTemplate?


Estoy publicando información en un servicio web utilizando RestTemplate.postForObject. Además de la cadena de resultado necesito la información en el encabezado de respuesta. ¿Hay alguna manera de conseguir esto?

RestTemplate template = new RestTemplate();
String result = template.postForObject(url, request, String.class);
Author: Eric Milas, 2011-05-15

4 answers

Bien, finalmente lo descubrí. El método de intercambio es exactamente lo que necesito. Devuelve un HttpEntity que contiene las cabeceras completas.

RestTemplate template = new RestTemplate();
HttpEntity<String> response = template.exchange(url, HttpMethod.POST, request, String.class);

String resultString = response.getBody();
HttpHeaders headers = response.getHeaders();
 42
Author: Eric Milas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-20 15:56:27

Lo mejor sería usar el método execute y pasar un ResponseExtractor que tendrá acceso a las cabeceras.

private static class StringFromHeadersExtractor implements ResponseExtractor<String> {

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

Otra opción (menos limpia) es extender RestTemplate y anular la llamada a doExecute y agregar cualquier lógica de manejo de encabezado especial allí.

 8
Author: Andrew White,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-15 02:35:07

No se si este es el método recomendado, pero parece que podría extraer información de los encabezados de respuesta si configura la plantilla para que use un HttpMessageConverter.

 1
Author: Stephen C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-15 08:17:57
  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
Author: Deepak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-10 21:24:35