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 be26087f72b..af7bcbb6ea1 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 @@ -814,9 +814,17 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator ResponseStatus responseStatusAnn = AnnotationUtils.findAnnotation(handlerMethod, ResponseStatus.class); if (responseStatusAnn != null) { HttpStatus responseStatus = responseStatusAnn.value(); + String reason = responseStatusAnn.reason(); + if (!StringUtils.hasText(reason)) { + webRequest.getResponse().setStatus(responseStatus.value()); + } + else { + webRequest.getResponse().sendError(responseStatus.value(), reason); + } + // to be picked up by the RedirectView webRequest.getRequest().setAttribute(View.RESPONSE_STATUS_ATTRIBUTE, responseStatus); - webRequest.getResponse().setStatus(responseStatus.value()); + responseArgumentUsed = true; } 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 726c6161939..1808d19fb49 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 @@ -1307,6 +1307,7 @@ public class ServletAnnotationControllerTests { servlet.service(request, response); assertEquals("something", response.getContentAsString()); assertEquals(201, response.getStatus()); + assertEquals("It's alive!", response.getErrorMessage()); } @Test @@ -2382,7 +2383,7 @@ public class ServletAnnotationControllerTests { public static class ResponseStatusController { @RequestMapping("/something") - @ResponseStatus(HttpStatus.CREATED) + @ResponseStatus(value = HttpStatus.CREATED, reason = "It's alive!") public void handle(Writer writer) throws IOException { writer.write("something"); }