Use default value for empty values in @RequestParam

Issue: SPR-10180
master
Rossen Stoyanchev 12 years ago
parent f5c9fe69a4
commit 221562dbeb
  1. 3
      spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java
  2. 31
      spring-web/src/test/java/org/springframework/web/method/annotation/RequestParamMethodArgumentResolverTests.java

@ -92,6 +92,9 @@ public abstract class AbstractNamedValueMethodArgumentResolver implements Handle
} }
arg = handleNullValue(namedValueInfo.name, arg, paramType); arg = handleNullValue(namedValueInfo.name, arg, paramType);
} }
else if ("".equals(arg) && (namedValueInfo.defaultValue != null)) {
arg = resolveDefaultValue(namedValueInfo.defaultValue);
}
if (binderFactory != null) { if (binderFactory != null) {
WebDataBinder binder = binderFactory.createBinder(webRequest, null, namedValueInfo.name); WebDataBinder binder = binderFactory.createBinder(webRequest, null, namedValueInfo.name);

@ -68,6 +68,7 @@ public class RequestParamMethodArgumentResolverTests {
private MethodParameter paramMultipartFileList; private MethodParameter paramMultipartFileList;
private MethodParameter paramServlet30Part; private MethodParameter paramServlet30Part;
private MethodParameter paramRequestPartAnnot; private MethodParameter paramRequestPartAnnot;
private MethodParameter paramRequired;
private NativeWebRequest webRequest; private NativeWebRequest webRequest;
@ -80,7 +81,7 @@ public class RequestParamMethodArgumentResolverTests {
ParameterNameDiscoverer paramNameDiscoverer = new LocalVariableTableParameterNameDiscoverer(); ParameterNameDiscoverer paramNameDiscoverer = new LocalVariableTableParameterNameDiscoverer();
Method method = getClass().getMethod("params", String.class, String[].class, Map.class, MultipartFile.class, 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); paramNamedDefaultValueString = new MethodParameter(method, 0);
paramNamedStringArray = new MethodParameter(method, 1); paramNamedStringArray = new MethodParameter(method, 1);
@ -96,6 +97,7 @@ public class RequestParamMethodArgumentResolverTests {
paramServlet30Part = new MethodParameter(method, 8); paramServlet30Part = new MethodParameter(method, 8);
paramServlet30Part.initParameterNameDiscovery(paramNameDiscoverer); paramServlet30Part.initParameterNameDiscovery(paramNameDiscoverer);
paramRequestPartAnnot = new MethodParameter(method, 9); paramRequestPartAnnot = new MethodParameter(method, 9);
paramRequired = new MethodParameter(method, 10);
request = new MockHttpServletRequest(); request = new MockHttpServletRequest();
webRequest = new ServletWebRequest(request, new MockHttpServletResponse()); webRequest = new ServletWebRequest(request, new MockHttpServletResponse());
@ -257,6 +259,30 @@ public class RequestParamMethodArgumentResolverTests {
assertNull(result); 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, public void params(@RequestParam(value = "name", defaultValue = "bar") String param1,
@RequestParam("name") String[] param2, @RequestParam("name") String[] param2,
@RequestParam("name") Map<?, ?> param3, @RequestParam("name") Map<?, ?> param3,
@ -266,7 +292,8 @@ public class RequestParamMethodArgumentResolverTests {
MultipartFile multipartFileNotAnnot, MultipartFile multipartFileNotAnnot,
List<MultipartFile> multipartFileList, List<MultipartFile> multipartFileList,
Part servlet30Part, Part servlet30Part,
@RequestPart MultipartFile requestPartAnnot) { @RequestPart MultipartFile requestPartAnnot,
@RequestParam(value = "name") String paramRequired) {
} }
} }

Loading…
Cancel
Save