From b0e308163645e2ad32d4c26a02fb5afbc4714733 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Thu, 11 Mar 2010 17:41:30 +0000 Subject: [PATCH] SPR-5866 - RestTemplate - access to Request Headers --- .../springframework/web/client/RestTemplate.java | 15 ++++++++++++--- .../web/client/RestTemplateIntegrationTests.java | 13 +++++++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/org.springframework.web/src/main/java/org/springframework/web/client/RestTemplate.java b/org.springframework.web/src/main/java/org/springframework/web/client/RestTemplate.java index 6e5fa12385..5d516fa8ab 100644 --- a/org.springframework.web/src/main/java/org/springframework/web/client/RestTemplate.java +++ b/org.springframework.web/src/main/java/org/springframework/web/client/RestTemplate.java @@ -587,12 +587,21 @@ public class RestTemplate extends HttpAccessor implements RestOperations { private final HttpMessageConverterExtractor delegate; public HttpEntityResponseExtractor(Class responseType) { - this.delegate = new HttpMessageConverterExtractor(responseType, getMessageConverters()); + if (responseType != null) { + this.delegate = new HttpMessageConverterExtractor(responseType, getMessageConverters()); + } else { + this.delegate = null; + } } public HttpEntity extractData(ClientHttpResponse response) throws IOException { - T body = delegate.extractData(response); - return new HttpEntity(body, response.getHeaders()); + if (delegate != null) { + T body = delegate.extractData(response); + return new HttpEntity(body, response.getHeaders()); + } + else { + return new HttpEntity(response.getHeaders()); + } } } diff --git a/org.springframework.web/src/test/java/org/springframework/web/client/RestTemplateIntegrationTests.java b/org.springframework.web/src/test/java/org/springframework/web/client/RestTemplateIntegrationTests.java index ea5732bfa5..20268b3b1c 100644 --- a/org.springframework.web/src/test/java/org/springframework/web/client/RestTemplateIntegrationTests.java +++ b/org.springframework.web/src/test/java/org/springframework/web/client/RestTemplateIntegrationTests.java @@ -50,9 +50,9 @@ import org.mortbay.jetty.servlet.ServletHolder; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; -import org.springframework.http.HttpHeaders; import org.springframework.http.client.CommonsClientHttpRequestFactory; import org.springframework.util.FileCopyUtils; import org.springframework.util.LinkedMultiValueMap; @@ -179,7 +179,7 @@ public class RestTemplateIntegrationTests { } @Test - public void exchange() throws Exception { + public void exchangeGet() throws Exception { HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.set("MyHeader", "MyValue"); HttpEntity requestEntity = new HttpEntity(requestHeaders); @@ -188,6 +188,15 @@ public class RestTemplateIntegrationTests { assertEquals("Invalid content", helloWorld, response.getBody()); } + @Test + public void exchangePost() throws Exception { + HttpHeaders requestHeaders = new HttpHeaders(); + requestHeaders.set("MyHeader", "MyValue"); + HttpEntity requestEntity = new HttpEntity(helloWorld, requestHeaders); + HttpEntity result = template.exchange(URI + "/{method}", HttpMethod.POST, requestEntity, null, "post"); + assertEquals("Invalid location", new URI(URI + "/post/1"), result.getHeaders().getLocation()); + assertFalse(result.hasBody()); + } /** Servlet that returns and error message for a given status code. */ private static class ErrorServlet extends GenericServlet {