Use default value for empty values in @RequestParam
Issue: SPR-10180
This commit is contained in:
parent
f5c9fe69a4
commit
221562dbeb
|
@ -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,16 +259,41 @@ 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,
|
||||||
@RequestParam(value = "file") MultipartFile param4,
|
@RequestParam(value = "file") MultipartFile param4,
|
||||||
@RequestParam Map<?, ?> param5,
|
@RequestParam Map<?, ?> param5,
|
||||||
String stringNotAnnot,
|
String stringNotAnnot,
|
||||||
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…
Reference in New Issue