MockMvcBuilder supports filter name in addition to initParams

Closes gh-31474
This commit is contained in:
rstoyanchev
2023-10-24 10:33:29 +01:00
parent ef47eef92a
commit e57b942b4d
6 changed files with 79 additions and 48 deletions

View File

@@ -132,22 +132,12 @@ public abstract class AbstractNamedValueMethodArgumentResolver implements Handle
}
if (binderFactory != null && (arg != null || !hasDefaultValue)) {
WebDataBinder binder = binderFactory.createBinder(webRequest, null, namedValueInfo.name);
try {
arg = binder.convertIfNecessary(arg, parameter.getParameterType(), parameter);
}
catch (ConversionNotSupportedException ex) {
throw new MethodArgumentConversionNotSupportedException(arg, ex.getRequiredType(),
namedValueInfo.name, parameter, ex.getCause());
}
catch (TypeMismatchException ex) {
throw new MethodArgumentTypeMismatchException(arg, ex.getRequiredType(),
namedValueInfo.name, parameter, ex.getCause());
}
arg = convertIfNecessary(parameter, webRequest, binderFactory, namedValueInfo, arg);
// Check for null value after conversion of incoming argument value
if (arg == null) {
if (namedValueInfo.defaultValue != null) {
arg = resolveEmbeddedValuesAndExpressions(namedValueInfo.defaultValue);
arg = convertIfNecessary(parameter, webRequest, binderFactory, namedValueInfo, arg);
}
else if (namedValueInfo.required && !nestedParameter.isOptional()) {
handleMissingValueAfterConversion(namedValueInfo.name, nestedParameter, webRequest);
@@ -284,6 +274,25 @@ public abstract class AbstractNamedValueMethodArgumentResolver implements Handle
return value;
}
private static Object convertIfNecessary(
MethodParameter parameter, NativeWebRequest webRequest, WebDataBinderFactory binderFactory,
NamedValueInfo namedValueInfo, Object arg) throws Exception {
WebDataBinder binder = binderFactory.createBinder(webRequest, null, namedValueInfo.name);
try {
arg = binder.convertIfNecessary(arg, parameter.getParameterType(), parameter);
}
catch (ConversionNotSupportedException ex) {
throw new MethodArgumentConversionNotSupportedException(arg, ex.getRequiredType(),
namedValueInfo.name, parameter, ex.getCause());
}
catch (TypeMismatchException ex) {
throw new MethodArgumentTypeMismatchException(arg, ex.getRequiredType(),
namedValueInfo.name, parameter, ex.getCause());
}
return arg;
}
/**
* Invoked after a value is resolved.
* @param arg the resolved argument value