Skip to content

Commit 0edf4d6

Browse files
committed
MockHttpServletRequest.getRequestURL aligns with getServerName/Port
Issue: SPR-16138
1 parent db050ac commit 0edf4d6

File tree

3 files changed

+60
-33
lines changed

3 files changed

+60
-33
lines changed

spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,13 +1199,18 @@ public String getRequestURI() {
11991199

12001200
@Override
12011201
public StringBuffer getRequestURL() {
1202-
StringBuffer url = new StringBuffer(this.scheme).append("://").append(this.serverName);
1203-
if (this.serverPort > 0 && ((HTTP.equalsIgnoreCase(this.scheme) && this.serverPort != 80) ||
1204-
(HTTPS.equalsIgnoreCase(this.scheme) && this.serverPort != 443))) {
1205-
url.append(':').append(this.serverPort);
1202+
String scheme = getScheme();
1203+
String server = getServerName();
1204+
int port = getServerPort();
1205+
String uri = getRequestURI();
1206+
1207+
StringBuffer url = new StringBuffer(scheme).append("://").append(server);
1208+
if (port > 0 && ((HTTP.equalsIgnoreCase(scheme) && port != 80) ||
1209+
(HTTPS.equalsIgnoreCase(scheme) && port != 443))) {
1210+
url.append(':').append(port);
12061211
}
1207-
if (StringUtils.hasText(getRequestURI())) {
1208-
url.append(getRequestURI());
1212+
if (StringUtils.hasText(uri)) {
1213+
url.append(uri);
12091214
}
12101215
return url;
12111216
}
@@ -1318,12 +1323,12 @@ public void addPart(Part part) {
13181323

13191324
@Override
13201325
@Nullable
1321-
public Part getPart(String name) throws IOException, IllegalStateException, ServletException {
1326+
public Part getPart(String name) throws IOException, ServletException {
13221327
return this.parts.getFirst(name);
13231328
}
13241329

13251330
@Override
1326-
public Collection<Part> getParts() throws IOException, IllegalStateException, ServletException {
1331+
public Collection<Part> getParts() throws IOException, ServletException {
13271332
List<Part> result = new LinkedList<>();
13281333
for (List<Part> list : this.parts.values()) {
13291334
result.addAll(list);

spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public void setContentAndGetInputStream() throws IOException {
8282
}
8383

8484
@Test
85-
public void setContentAndGetContentAsByteArray() throws IOException {
85+
public void setContentAndGetContentAsByteArray() {
8686
byte[] bytes = "request body".getBytes();
8787
request.setContent(bytes);
8888
assertEquals(bytes.length, request.getContentLength());
@@ -152,9 +152,7 @@ public void contentTypeHeaderUTF8() {
152152
assertEquals("UTF-8", request.getCharacterEncoding());
153153
}
154154

155-
// SPR-12677
156-
157-
@Test
155+
@Test // SPR-12677
158156
public void setContentTypeHeaderWithMoreComplexCharsetSyntax() {
159157
String contentType = "test/plain;charset=\"utf-8\";foo=\"charset=bar\";foocharset=bar;foo=bar";
160158
request.addHeader("Content-Type", contentType);
@@ -182,7 +180,7 @@ public void setCharacterEncodingThenContentType() {
182180
}
183181

184182
@Test
185-
public void httpHeaderNameCasingIsPreserved() throws Exception {
183+
public void httpHeaderNameCasingIsPreserved() {
186184
String headerName = "Header1";
187185
request.addHeader(headerName, "value1");
188186
Enumeration<String> requestHeaders = request.getHeaderNames();
@@ -402,6 +400,22 @@ public void getRequestURLWithDefaults() {
402400
assertEquals("http://localhost", requestURL.toString());
403401
}
404402

403+
@Test // SPR-16138
404+
public void getRequestURLWithHostHeader() {
405+
String testServer = "test.server";
406+
request.addHeader(HOST, testServer);
407+
StringBuffer requestURL = request.getRequestURL();
408+
assertEquals("http://" + testServer, requestURL.toString());
409+
}
410+
411+
@Test // SPR-16138
412+
public void getRequestURLWithHostHeaderAndPort() {
413+
String testServer = "test.server:9999";
414+
request.addHeader(HOST, testServer);
415+
StringBuffer requestURL = request.getRequestURL();
416+
assertEquals("http://" + testServer, requestURL.toString());
417+
}
418+
405419
@Test
406420
public void getRequestURLWithNullRequestUri() {
407421
request.setRequestURI(null);
@@ -457,39 +471,39 @@ public void isSecureWithHttpsSchemeAndSecureFlagIsTrue() {
457471
}
458472

459473
@Test
460-
public void httpHeaderDate() throws Exception {
474+
public void httpHeaderDate() {
461475
Date date = new Date();
462476
request.addHeader(IF_MODIFIED_SINCE, date);
463477
assertEquals(date.getTime(), request.getDateHeader(IF_MODIFIED_SINCE));
464478
}
465479

466480
@Test
467-
public void httpHeaderTimestamp() throws Exception {
481+
public void httpHeaderTimestamp() {
468482
long timestamp = new Date().getTime();
469483
request.addHeader(IF_MODIFIED_SINCE, timestamp);
470484
assertEquals(timestamp, request.getDateHeader(IF_MODIFIED_SINCE));
471485
}
472486

473487
@Test
474-
public void httpHeaderRfcFormatedDate() throws Exception {
488+
public void httpHeaderRfcFormatedDate() {
475489
request.addHeader(IF_MODIFIED_SINCE, "Tue, 21 Jul 2015 10:00:00 GMT");
476490
assertEquals(1437472800000L, request.getDateHeader(IF_MODIFIED_SINCE));
477491
}
478492

479493
@Test
480-
public void httpHeaderFirstVariantFormatedDate() throws Exception {
494+
public void httpHeaderFirstVariantFormatedDate() {
481495
request.addHeader(IF_MODIFIED_SINCE, "Tue, 21-Jul-15 10:00:00 GMT");
482496
assertEquals(1437472800000L, request.getDateHeader(IF_MODIFIED_SINCE));
483497
}
484498

485499
@Test
486-
public void httpHeaderSecondVariantFormatedDate() throws Exception {
500+
public void httpHeaderSecondVariantFormatedDate() {
487501
request.addHeader(IF_MODIFIED_SINCE, "Tue Jul 21 10:00:00 2015");
488502
assertEquals(1437472800000L, request.getDateHeader(IF_MODIFIED_SINCE));
489503
}
490504

491505
@Test(expected = IllegalArgumentException.class)
492-
public void httpHeaderFormatedDateError() throws Exception {
506+
public void httpHeaderFormatedDateError() {
493507
request.addHeader(IF_MODIFIED_SINCE, "This is not a date");
494508
request.getDateHeader(IF_MODIFIED_SINCE);
495509
}

spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletRequest.java

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import org.springframework.util.LinkedCaseInsensitiveMap;
6363
import org.springframework.util.LinkedMultiValueMap;
6464
import org.springframework.util.MultiValueMap;
65+
import org.springframework.util.ObjectUtils;
6566
import org.springframework.util.StreamUtils;
6667
import org.springframework.util.StringUtils;
6768

@@ -404,7 +405,7 @@ public void setContent(byte[] content) {
404405

405406
/**
406407
* Get the content of the request body as a byte array.
407-
* @return the content as a byte array, potentially {@code null}
408+
* @return the content as a byte array (potentially {@code null})
408409
* @since 5.0
409410
* @see #setContent(byte[])
410411
* @see #getContentAsString()
@@ -588,7 +589,8 @@ public void removeAllParameters() {
588589

589590
@Override
590591
public String getParameter(String name) {
591-
String[] arr = (name != null ? this.parameters.get(name) : null);
592+
Assert.notNull(name, "Parameter name must not be null");
593+
String[] arr = this.parameters.get(name);
592594
return (arr != null && arr.length > 0 ? arr[0] : null);
593595
}
594596

@@ -599,7 +601,8 @@ public Enumeration<String> getParameterNames() {
599601

600602
@Override
601603
public String[] getParameterValues(String name) {
602-
return (name != null ? this.parameters.get(name) : null);
604+
Assert.notNull(name, "Parameter name must not be null");
605+
return this.parameters.get(name);
603606
}
604607

605608
@Override
@@ -927,10 +930,10 @@ public String getAuthType() {
927930
}
928931

929932
public void setCookies(Cookie... cookies) {
930-
this.cookies = cookies;
933+
this.cookies = (ObjectUtils.isEmpty(cookies) ? null : cookies);
931934
this.headers.remove(HttpHeaders.COOKIE);
932-
if (cookies != null) {
933-
Arrays.stream(cookies)
935+
if (this.cookies != null) {
936+
Arrays.stream(this.cookies)
934937
.map(c -> c.getName() + '=' + (c.getValue() == null ? "" : c.getValue()))
935938
.forEach(value -> doAddHeaderValue(HttpHeaders.COOKIE, value, false));
936939
}
@@ -1164,13 +1167,18 @@ public String getRequestURI() {
11641167

11651168
@Override
11661169
public StringBuffer getRequestURL() {
1167-
StringBuffer url = new StringBuffer(this.scheme).append("://").append(this.serverName);
1168-
if (this.serverPort > 0 && ((HTTP.equalsIgnoreCase(this.scheme) && this.serverPort != 80) ||
1169-
(HTTPS.equalsIgnoreCase(this.scheme) && this.serverPort != 443))) {
1170-
url.append(':').append(this.serverPort);
1170+
String scheme = getScheme();
1171+
String server = getServerName();
1172+
int port = getServerPort();
1173+
String uri = getRequestURI();
1174+
1175+
StringBuffer url = new StringBuffer(scheme).append("://").append(server);
1176+
if (port > 0 && ((HTTP.equalsIgnoreCase(scheme) && port != 80) ||
1177+
(HTTPS.equalsIgnoreCase(scheme) && port != 443))) {
1178+
url.append(':').append(port);
11711179
}
1172-
if (StringUtils.hasText(getRequestURI())) {
1173-
url.append(getRequestURI());
1180+
if (StringUtils.hasText(uri)) {
1181+
url.append(uri);
11741182
}
11751183
return url;
11761184
}
@@ -1280,12 +1288,12 @@ public void addPart(Part part) {
12801288
}
12811289

12821290
@Override
1283-
public Part getPart(String name) throws IOException, IllegalStateException, ServletException {
1291+
public Part getPart(String name) throws IOException, ServletException {
12841292
return this.parts.getFirst(name);
12851293
}
12861294

12871295
@Override
1288-
public Collection<Part> getParts() throws IOException, IllegalStateException, ServletException {
1296+
public Collection<Part> getParts() throws IOException, ServletException {
12891297
List<Part> result = new LinkedList<>();
12901298
for (List<Part> list : this.parts.values()) {
12911299
result.addAll(list);

0 commit comments

Comments
 (0)