diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/RedirectView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/RedirectView.java index c3a4e38007..acccf0b296 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/RedirectView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/RedirectView.java @@ -591,10 +591,15 @@ public class RedirectView extends AbstractUrlBasedView implements SmartView { String encodedRedirectURL = response.encodeRedirectURL(targetUrl); if (http10Compatible) { + HttpStatus attributeStatusCode = (HttpStatus) request.getAttribute(View.RESPONSE_STATUS_ATTRIBUTE); if (this.statusCode != null) { response.setStatus(this.statusCode.value()); response.setHeader("Location", encodedRedirectURL); } + else if (attributeStatusCode != null) { + response.setStatus(attributeStatusCode.value()); + response.setHeader("Location", encodedRedirectURL); + } else { // Send status code 302 by default. response.sendRedirect(encodedRedirectURL); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/RedirectViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/RedirectViewTests.java index 13ff3ed431..0120d8b256 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/RedirectViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/RedirectViewTests.java @@ -109,6 +109,18 @@ public class RedirectViewTests { assertEquals("http://url.somewhere.com", response.getHeader("Location")); } + @Test + public void attributeStatusCodeHttp10() throws Exception { + RedirectView rv = new RedirectView(); + rv.setUrl("http://url.somewhere.com"); + MockHttpServletRequest request = createRequest(); + request.setAttribute(View.RESPONSE_STATUS_ATTRIBUTE, HttpStatus.CREATED); + MockHttpServletResponse response = new MockHttpServletResponse(); + rv.render(new HashMap(), request, response); + assertEquals(201, response.getStatus()); + assertEquals("http://url.somewhere.com", response.getHeader("Location")); + } + @Test public void attributeStatusCodeHttp11() throws Exception { RedirectView rv = new RedirectView();