|
18 | 18 |
|
19 | 19 | import java.io.File;
|
20 | 20 | import java.io.IOException;
|
21 |
| -import java.net.URLDecoder; |
22 | 21 | import java.nio.charset.Charset;
|
23 | 22 | import java.nio.charset.StandardCharsets;
|
24 | 23 | import java.nio.file.Files;
|
@@ -159,7 +158,7 @@ public MockHttpServletRequest buildRequest(ServletContext servletContext) {
|
159 | 158 | cookies(request);
|
160 | 159 | this.webRequest.getAdditionalHeaders().forEach(request::addHeader);
|
161 | 160 | locales(request);
|
162 |
| - params(request, uri); |
| 161 | + params(request); |
163 | 162 | request.setQueryString(uri.getQuery());
|
164 | 163 |
|
165 | 164 | return postProcess(request);
|
@@ -364,42 +363,36 @@ private void locales(MockHttpServletRequest request) {
|
364 | 363 | }
|
365 | 364 | }
|
366 | 365 |
|
367 |
| - private void params(MockHttpServletRequest request, UriComponents uriComponents) { |
368 |
| - uriComponents.getQueryParams().forEach((name, values) -> { |
369 |
| - String urlDecodedName = urlDecode(name); |
370 |
| - values.forEach(value -> { |
371 |
| - value = (value != null ? urlDecode(value) : ""); |
372 |
| - request.addParameter(urlDecodedName, value); |
373 |
| - }); |
374 |
| - }); |
375 |
| - for (NameValuePair param : this.webRequest.getRequestParameters()) { |
376 |
| - if (param instanceof KeyDataPair pair) { |
377 |
| - File file = pair.getFile(); |
378 |
| - MockPart part; |
379 |
| - if (file != null) { |
380 |
| - part = new MockPart(pair.getName(), file.getName(), readAllBytes(file)); |
381 |
| - } |
382 |
| - else { |
383 |
| - // Support empty file upload OR file upload via setData(). |
384 |
| - // For an empty file upload, getValue() returns an empty string, and |
385 |
| - // getData() returns null. |
386 |
| - // For a file upload via setData(), getData() returns the file data, and |
387 |
| - // getValue() returns the file name (if set) or an empty string. |
388 |
| - part = new MockPart(pair.getName(), pair.getValue(), pair.getData()); |
389 |
| - } |
390 |
| - MediaType mediaType = (pair.getMimeType() != null ? MediaType.valueOf(pair.getMimeType()) : |
391 |
| - MediaType.APPLICATION_OCTET_STREAM); |
392 |
| - part.getHeaders().setContentType(mediaType); |
393 |
| - request.addPart(part); |
| 366 | + private void params(MockHttpServletRequest request) { |
| 367 | + for (NameValuePair param : this.webRequest.getParameters()) { |
| 368 | + addRequestParameter(request, param); |
| 369 | + } |
| 370 | + } |
| 371 | + |
| 372 | + private void addRequestParameter(MockHttpServletRequest request, NameValuePair param) { |
| 373 | + if (param instanceof KeyDataPair) { |
| 374 | + KeyDataPair pair = (KeyDataPair) param; |
| 375 | + File file = pair.getFile(); |
| 376 | + MockPart part; |
| 377 | + if (file != null) { |
| 378 | + part = new MockPart(pair.getName(), file.getName(), readAllBytes(file)); |
394 | 379 | }
|
395 | 380 | else {
|
396 |
| - request.addParameter(param.getName(), param.getValue()); |
| 381 | + // Support empty file upload OR file upload via setData(). |
| 382 | + // For an empty file upload, getValue() returns an empty string, and |
| 383 | + // getData() returns null. |
| 384 | + // For a file upload via setData(), getData() returns the file data, and |
| 385 | + // getValue() returns the file name (if set) or an empty string. |
| 386 | + part = new MockPart(pair.getName(), pair.getValue(), pair.getData()); |
397 | 387 | }
|
| 388 | + MediaType mediaType = (pair.getMimeType() != null ? MediaType.valueOf(pair.getMimeType()) : |
| 389 | + MediaType.APPLICATION_OCTET_STREAM); |
| 390 | + part.getHeaders().setContentType(mediaType); |
| 391 | + request.addPart(part); |
| 392 | + } |
| 393 | + else { |
| 394 | + request.addParameter(param.getName(), param.getValue()); |
398 | 395 | }
|
399 |
| - } |
400 |
| - |
401 |
| - private String urlDecode(String value) { |
402 |
| - return URLDecoder.decode(value, StandardCharsets.UTF_8); |
403 | 396 | }
|
404 | 397 |
|
405 | 398 | private byte[] readAllBytes(File file) {
|
|
0 commit comments