Treat query param w/o "=" as empty string in HtmlUnitRequestBuilder

Prior to this commit, HtmlUnitRequestBuilder stored empty query
parameters declared without an equals sign as null (i.e., query
parameters such as 'error' in 'http://example.com/login?error').

This commit addresses this issue by ensuring that
HtmlUnitRequestBuilder treats all empty query parameter values as empty
strings. Consequently, query strings such as '?error' and '?error=' now
both result in 'error' being stored as an empty string.

Issue: SPR-13524
This commit is contained in:
Sam Brannen 2015-10-04 19:11:41 +02:00
parent c52f9d3524
commit 61a46db101
2 changed files with 5 additions and 7 deletions

View File

@ -358,13 +358,11 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable {
} }
private void params(MockHttpServletRequest request, UriComponents uriComponents) { private void params(MockHttpServletRequest request, UriComponents uriComponents) {
for (Entry<String, List<String>> values : uriComponents.getQueryParams().entrySet()) { for (Entry<String, List<String>> entry : uriComponents.getQueryParams().entrySet()) {
String name = values.getKey(); String name = entry.getKey();
for (String value : values.getValue()) { for (String value : entry.getValue()) {
try { try {
if (value != null) { value = (value != null ? URLDecoder.decode(value, "UTF-8") : "");
value = URLDecoder.decode(value, "UTF-8");
}
request.addParameter(name, value); request.addParameter(name, value);
} }
catch (UnsupportedEncodingException e) { catch (UnsupportedEncodingException e) {

View File

@ -417,7 +417,7 @@ public class HtmlUnitRequestBuilderTests {
MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext); MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext);
assertThat(actualRequest.getParameterMap().size(), equalTo(1)); assertThat(actualRequest.getParameterMap().size(), equalTo(1));
assertThat(actualRequest.getParameter("name"), nullValue()); assertThat(actualRequest.getParameter("name"), equalTo(""));
} }
@Test @Test