diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java index 533d52064a..722250cb9d 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java @@ -36,6 +36,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; + import javax.servlet.AsyncContext; import javax.servlet.DispatcherType; import javax.servlet.RequestDispatcher; @@ -946,8 +947,13 @@ public class MockHttpServletRequest implements HttpServletRequest { @Override public StringBuffer getRequestURL() { - StringBuffer url = new StringBuffer(this.scheme); - url.append("://").append(this.serverName).append(':').append(this.serverPort); + StringBuffer url = new StringBuffer(this.scheme).append("://").append(this.serverName); + + if (this.serverPort > 0 + && (("http".equalsIgnoreCase(scheme) && this.serverPort != 80) || ("https".equalsIgnoreCase(scheme) && this.serverPort != 443))) { + url.append(':').append(this.serverPort); + } + url.append(getRequestURI()); return url; } diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java index a237bb00d1..5eb2c42a62 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java @@ -193,6 +193,39 @@ public class MockHttpServletRequestTests { assertEqualEnumerations(Collections.enumeration(preferredLocales), request.getLocales()); } + @Test + public void getRequestURL() { + request.setServerPort(8080); + request.setRequestURI("/path"); + assertEquals("http://localhost:8080/path", request.getRequestURL().toString()); + + request.setScheme("https"); + request.setServerName("example.com"); + request.setServerPort(8443); + assertEquals("https://example.com:8443/path", request.getRequestURL().toString()); + } + + @Test + public void getRequestURLWithDefaults() { + StringBuffer requestURL = request.getRequestURL(); + assertEquals("http://localhost", requestURL.toString()); + } + + @Test + public void getRequestURLWithDefaultsAndHttps() { + request.setScheme("https"); + request.setServerPort(443); + StringBuffer requestURL = request.getRequestURL(); + assertEquals("https://localhost", requestURL.toString()); + } + + @Test + public void getRequestURLWithNegativePort() { + request.setServerPort(-99); + StringBuffer requestURL = request.getRequestURL(); + assertEquals("http://localhost", requestURL.toString()); + } + private void assertEqualEnumerations(Enumeration enum1, Enumeration enum2) { assertNotNull(enum1); assertNotNull(enum2);