Skip to content

Commit bfc5ad8

Browse files
committed
MockHttpServletRequest resets InputStream/Reader on setContent
Issue: SPR-17373
1 parent b7e4a56 commit bfc5ad8

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,8 @@ private void updateContentTypeHeader() {
423423
*/
424424
public void setContent(@Nullable byte[] content) {
425425
this.content = content;
426+
this.inputStream = null;
427+
this.reader = null;
426428
}
427429

428430
/**

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

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.junit.rules.ExpectedException;
3535

3636
import org.springframework.http.HttpHeaders;
37+
import org.springframework.util.FileCopyUtils;
3738
import org.springframework.util.StreamUtils;
3839

3940
import static org.junit.Assert.*;
@@ -74,16 +75,30 @@ public void setContentAndGetInputStream() throws IOException {
7475
byte[] bytes = "body".getBytes(Charset.defaultCharset());
7576
request.setContent(bytes);
7677
assertEquals(bytes.length, request.getContentLength());
77-
assertNotNull(request.getInputStream());
7878
assertEquals("body", StreamUtils.copyToString(request.getInputStream(), Charset.defaultCharset()));
79+
80+
request.setContent(bytes);
81+
assertEquals(bytes.length, request.getContentLength());
82+
assertEquals("body", StreamUtils.copyToString(request.getInputStream(), Charset.defaultCharset()));
83+
}
84+
85+
@Test
86+
public void setContentAndGetReader() throws IOException {
87+
byte[] bytes = "body".getBytes(Charset.defaultCharset());
88+
request.setContent(bytes);
89+
assertEquals(bytes.length, request.getContentLength());
90+
assertEquals("body", FileCopyUtils.copyToString(request.getReader()));
91+
92+
request.setContent(bytes);
93+
assertEquals(bytes.length, request.getContentLength());
94+
assertEquals("body", FileCopyUtils.copyToString(request.getReader()));
7995
}
8096

8197
@Test
8298
public void setContentAndGetContentAsByteArray() {
8399
byte[] bytes = "request body".getBytes();
84100
request.setContent(bytes);
85101
assertEquals(bytes.length, request.getContentLength());
86-
assertNotNull(request.getContentAsByteArray());
87102
assertEquals(bytes, request.getContentAsByteArray());
88103
}
89104

@@ -101,14 +116,12 @@ public void setContentAndGetContentAsStringWithExplicitCharacterEncoding() throw
101116
request.setCharacterEncoding("UTF-16");
102117
request.setContent(bytes);
103118
assertEquals(bytes.length, request.getContentLength());
104-
assertNotNull(request.getContentAsString());
105119
assertEquals(palindrome, request.getContentAsString());
106120
}
107121

108122
@Test
109123
public void noContent() throws IOException {
110124
assertEquals(-1, request.getContentLength());
111-
assertNotNull(request.getInputStream());
112125
assertEquals(-1, request.getInputStream().read());
113126
assertNull(request.getContentAsByteArray());
114127
}
@@ -213,7 +226,6 @@ public void httpHeaderNameCasingIsPreserved() {
213226
String headerName = "Header1";
214227
request.addHeader(headerName, "value1");
215228
Enumeration<String> requestHeaders = request.getHeaderNames();
216-
assertNotNull(requestHeaders);
217229
assertEquals("HTTP header casing not being preserved", headerName, requestHeaders.nextElement());
218230
}
219231

@@ -545,8 +557,6 @@ public void httpHeaderFormatedDateError() {
545557
}
546558

547559
private void assertEqualEnumerations(Enumeration<?> enum1, Enumeration<?> enum2) {
548-
assertNotNull(enum1);
549-
assertNotNull(enum2);
550560
int count = 0;
551561
while (enum1.hasMoreElements()) {
552562
assertTrue("enumerations must be equal in length", enum2.hasMoreElements());

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,8 @@ private void updateContentTypeHeader() {
423423
*/
424424
public void setContent(@Nullable byte[] content) {
425425
this.content = content;
426+
this.inputStream = null;
427+
this.reader = null;
426428
}
427429

428430
/**

0 commit comments

Comments
 (0)