SPR-7145 - NullPointerException in AnnotationMethodHandlerAdapter if HttpHeaders in ResponseEntity are empty

This commit is contained in:
Arjen Poutsma 2010-04-29 08:04:36 +00:00
parent aa216672ae
commit a910ce68ff
2 changed files with 20 additions and 6 deletions

View File

@ -912,7 +912,10 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator
if (!entityHeaders.isEmpty()) { if (!entityHeaders.isEmpty()) {
outputMessage.getHeaders().putAll(entityHeaders); outputMessage.getHeaders().putAll(entityHeaders);
} }
writeWithMessageConverters(responseEntity.getBody(), inputMessage, outputMessage); Object body = responseEntity.getBody();
if (body != null) {
writeWithMessageConverters(body, inputMessage, outputMessage);
}
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")

View File

@ -1192,9 +1192,9 @@ public class ServletAnnotationControllerTests {
@Test @Test
public void httpEntity() throws ServletException, IOException { public void httpEntity() throws ServletException, IOException {
initServlet(HttpEntityController.class); initServlet(ResponseEntityController.class);
MockHttpServletRequest request = new MockHttpServletRequest("PUT", "/handle"); MockHttpServletRequest request = new MockHttpServletRequest("PUT", "/foo");
String requestBody = "Hello World"; String requestBody = "Hello World";
request.setContent(requestBody.getBytes("UTF-8")); request.setContent(requestBody.getBytes("UTF-8"));
request.addHeader("Content-Type", "text/plain; charset=utf-8"); request.addHeader("Content-Type", "text/plain; charset=utf-8");
@ -1205,6 +1205,11 @@ public class ServletAnnotationControllerTests {
assertEquals(201, response.getStatus()); assertEquals(201, response.getStatus());
assertEquals(requestBody, response.getContentAsString()); assertEquals(requestBody, response.getContentAsString());
assertEquals("MyValue", response.getHeader("MyResponseHeader")); assertEquals("MyValue", response.getHeader("MyResponseHeader"));
request = new MockHttpServletRequest("PUT", "/bar");
response = new MockHttpServletResponse();
servlet.service(request, response);
assertEquals(404, response.getStatus());
} }
@ -2597,10 +2602,10 @@ public class ServletAnnotationControllerTests {
} }
@Controller @Controller
public static class HttpEntityController { public static class ResponseEntityController {
@RequestMapping("/handle") @RequestMapping("/foo")
public ResponseEntity<String> handle(HttpEntity<byte[]> requestEntity) throws UnsupportedEncodingException { public ResponseEntity<String> foo(HttpEntity<byte[]> requestEntity) throws UnsupportedEncodingException {
assertNotNull(requestEntity); assertNotNull(requestEntity);
assertEquals("MyValue", requestEntity.getHeaders().getFirst("MyRequestHeader")); assertEquals("MyValue", requestEntity.getHeaders().getFirst("MyRequestHeader"));
String requestBody = new String(requestEntity.getBody(), "UTF-8"); String requestBody = new String(requestEntity.getBody(), "UTF-8");
@ -2610,6 +2615,12 @@ public class ServletAnnotationControllerTests {
responseHeaders.set("MyResponseHeader", "MyValue"); responseHeaders.set("MyResponseHeader", "MyValue");
return new ResponseEntity<String>(requestBody, responseHeaders, HttpStatus.CREATED); return new ResponseEntity<String>(requestBody, responseHeaders, HttpStatus.CREATED);
} }
@RequestMapping("/bar")
public ResponseEntity<String> bar() {
return new ResponseEntity<String>(new HttpHeaders(), HttpStatus.NOT_FOUND);
}
} }
@Controller @Controller