Skip to content

Commit

Permalink
Use default value for empty values in @RequestParam
Browse files Browse the repository at this point in the history
Issue: SPR-10180
  • Loading branch information
rstoyanchev committed Feb 15, 2013
1 parent f5c9fe6 commit 221562d
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,9 @@ else if (namedValueInfo.required) {
}
arg = handleNullValue(namedValueInfo.name, arg, paramType);
}
else if ("".equals(arg) && (namedValueInfo.defaultValue != null)) {
arg = resolveDefaultValue(namedValueInfo.defaultValue);
}

if (binderFactory != null) {
WebDataBinder binder = binderFactory.createBinder(webRequest, null, namedValueInfo.name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ public class RequestParamMethodArgumentResolverTests {
private MethodParameter paramMultipartFileList;
private MethodParameter paramServlet30Part;
private MethodParameter paramRequestPartAnnot;
private MethodParameter paramRequired;

private NativeWebRequest webRequest;

Expand All @@ -80,7 +81,7 @@ public void setUp() throws Exception {
ParameterNameDiscoverer paramNameDiscoverer = new LocalVariableTableParameterNameDiscoverer();

Method method = getClass().getMethod("params", String.class, String[].class, Map.class, MultipartFile.class,
Map.class, String.class, MultipartFile.class, List.class, Part.class, MultipartFile.class);
Map.class, String.class, MultipartFile.class, List.class, Part.class, MultipartFile.class, String.class);

paramNamedDefaultValueString = new MethodParameter(method, 0);
paramNamedStringArray = new MethodParameter(method, 1);
Expand All @@ -96,6 +97,7 @@ public void setUp() throws Exception {
paramServlet30Part = new MethodParameter(method, 8);
paramServlet30Part.initParameterNameDiscovery(paramNameDiscoverer);
paramRequestPartAnnot = new MethodParameter(method, 9);
paramRequired = new MethodParameter(method, 10);

request = new MockHttpServletRequest();
webRequest = new ServletWebRequest(request, new MockHttpServletResponse());
Expand Down Expand Up @@ -257,16 +259,41 @@ public void resolveSimpleTypeParamToNull() throws Exception {
assertNull(result);
}

// SPR-10180

@Test
public void resolveEmptyValueToDefault() throws Exception {
this.request.addParameter("name", "");
Object result = resolver.resolveArgument(paramNamedDefaultValueString, null, webRequest, null);
assertEquals("bar", result);
}

@Test
public void resolveEmptyValueWithoutDefault() throws Exception {
this.request.addParameter("stringNotAnnot", "");
Object result = resolver.resolveArgument(paramStringNotAnnot, null, webRequest, null);
assertEquals("", result);
}

@Test
public void resolveEmptyValueRequiredWithoutDefault() throws Exception {
this.request.addParameter("name", "");
Object result = resolver.resolveArgument(paramRequired, null, webRequest, null);
assertEquals("", result);
}


public void params(@RequestParam(value = "name", defaultValue = "bar") String param1,
@RequestParam("name") String[] param2,
@RequestParam("name") Map<?, ?> param3,
@RequestParam(value = "file") MultipartFile param4,
@RequestParam Map<?, ?> param5,
String stringNotAnnot,
MultipartFile multipartFileNotAnnot,
List<MultipartFile> multipartFileList,
Part servlet30Part,
@RequestPart MultipartFile requestPartAnnot) {
@RequestParam("name") String[] param2,
@RequestParam("name") Map<?, ?> param3,
@RequestParam(value = "file") MultipartFile param4,
@RequestParam Map<?, ?> param5,
String stringNotAnnot,
MultipartFile multipartFileNotAnnot,
List<MultipartFile> multipartFileList,
Part servlet30Part,
@RequestPart MultipartFile requestPartAnnot,
@RequestParam(value = "name") String paramRequired) {
}

}

0 comments on commit 221562d

Please sign in to comment.