diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java index df838edaab..91eb62a12d 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/DispatcherServlet.java @@ -1393,6 +1393,7 @@ public class DispatcherServlet extends FrameworkServlet { } try { if (mv.getStatus() != null) { + request.setAttribute(View.RESPONSE_STATUS_ATTRIBUTE, mv.getStatus()); response.setStatus(mv.getStatus().value()); } view.render(mv.getModelInternal(), request, response); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java index 46f4d25773..5f4e40a0cf 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java @@ -1896,6 +1896,18 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl assertThat(response.getForwardedUrl()).isEqualTo("view"); } + @PathPatternsParameterizedTest + void modelAndViewWithStatusForRedirect(boolean usePathPatterns) throws Exception { + initDispatcherServlet(ModelAndViewController.class, usePathPatterns); + + MockHttpServletRequest request = new MockHttpServletRequest("GET", "/redirect"); + MockHttpServletResponse response = new MockHttpServletResponse(); + getServlet().service(request, response); + + assertThat(response.getStatus()).isEqualTo(307); + assertThat(response.getRedirectedUrl()).isEqualTo("/path"); + } + @PathPatternsParameterizedTest // SPR-14796 void modelAndViewWithStatusInExceptionHandler(boolean usePathPatterns) throws Exception { initDispatcherServlet(ModelAndViewController.class, usePathPatterns); @@ -3884,6 +3896,11 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl return new ModelAndView("view", HttpStatus.UNPROCESSABLE_ENTITY); } + @RequestMapping("/redirect") + public ModelAndView methodWithHttpStatusForRedirect(MyEntity object) { + return new ModelAndView("redirect:/path", HttpStatus.TEMPORARY_REDIRECT); + } + @RequestMapping("/exception") public void raiseException() throws Exception { throw new TestException();