From 9261766677727387a7c43d7382362863b6a602c8 Mon Sep 17 00:00:00 2001 From: "Katada, Junya" Date: Sun, 17 May 2020 00:07:21 +0900 Subject: [PATCH] Fix for ModelAndView.status not working with RedirectView --- .../web/servlet/DispatcherServlet.java | 1 + ...tAnnotationControllerHandlerMethodTests.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) 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 869b4c6979..cd4dc70872 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 @@ -1395,6 +1395,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 6957bdfc82..aeaf049adb 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 @@ -1897,6 +1897,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); @@ -3872,6 +3884,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();