diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java index af7bcbb6ea1..9853e06c40f 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java @@ -912,7 +912,10 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator if (!entityHeaders.isEmpty()) { outputMessage.getHeaders().putAll(entityHeaders); } - writeWithMessageConverters(responseEntity.getBody(), inputMessage, outputMessage); + Object body = responseEntity.getBody(); + if (body != null) { + writeWithMessageConverters(body, inputMessage, outputMessage); + } } @SuppressWarnings("unchecked") diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationControllerTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationControllerTests.java index 1808d19fb49..68d211983c1 100644 --- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationControllerTests.java +++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationControllerTests.java @@ -1192,9 +1192,9 @@ public class ServletAnnotationControllerTests { @Test 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"; request.setContent(requestBody.getBytes("UTF-8")); request.addHeader("Content-Type", "text/plain; charset=utf-8"); @@ -1205,6 +1205,11 @@ public class ServletAnnotationControllerTests { assertEquals(201, response.getStatus()); assertEquals(requestBody, response.getContentAsString()); 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 - public static class HttpEntityController { + public static class ResponseEntityController { - @RequestMapping("/handle") - public ResponseEntity handle(HttpEntity requestEntity) throws UnsupportedEncodingException { + @RequestMapping("/foo") + public ResponseEntity foo(HttpEntity requestEntity) throws UnsupportedEncodingException { assertNotNull(requestEntity); assertEquals("MyValue", requestEntity.getHeaders().getFirst("MyRequestHeader")); String requestBody = new String(requestEntity.getBody(), "UTF-8"); @@ -2610,6 +2615,12 @@ public class ServletAnnotationControllerTests { responseHeaders.set("MyResponseHeader", "MyValue"); return new ResponseEntity(requestBody, responseHeaders, HttpStatus.CREATED); } + + @RequestMapping("/bar") + public ResponseEntity bar() { + return new ResponseEntity(new HttpHeaders(), HttpStatus.NOT_FOUND); + } + } @Controller