diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/RedirectView.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/RedirectView.java index 25b20e31791..f554eea0985 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/RedirectView.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/RedirectView.java @@ -208,13 +208,13 @@ public class RedirectView extends AbstractUrlBasedView { throws IOException { String encoding = getEncoding(request); - + // Prepare target URL. StringBuilder targetUrl = new StringBuilder(); if (this.contextRelative && getUrl().startsWith("/")) { // Do not apply context path to relative URLs. targetUrl.append(UriUtils.encodePath(request.getContextPath(), encoding)); - targetUrl.append(UriUtils.encodePath(getUrl(), encoding)); + targetUrl.append(UriUtils.encodeUri(getUrl(), encoding)); } else { targetUrl.append(UriUtils.encodeUri(getUrl(), encoding)); diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/RedirectViewTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/RedirectViewTests.java index 1a33a01ef16..80fdeb0359a 100644 --- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/RedirectViewTests.java +++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/RedirectViewTests.java @@ -135,6 +135,12 @@ public class RedirectViewTests { String expectedUrlForEncoding = "http://url.somewhere.com/test.htm" + "?" + key + "=" + val + "#myAnchor"; doTest(model, url, false, expectedUrlForEncoding); } + + @Test + public void contextRelativeQueryParam() throws Exception { + String url = "/test.html?id=1"; + doTest(new HashMap(), url, true, url); + } @Test public void twoParams() throws Exception {