Unwrap validator if necessary in HandlerMethodValidator
See gh-31082
This commit is contained in:
@@ -27,6 +27,7 @@ import org.springframework.core.ParameterNameDiscoverer;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.validation.MessageCodesResolver;
|
||||
import org.springframework.validation.SmartValidator;
|
||||
import org.springframework.validation.beanvalidation.MethodValidationAdapter;
|
||||
import org.springframework.validation.method.MethodValidationResult;
|
||||
import org.springframework.validation.method.MethodValidator;
|
||||
@@ -144,7 +145,8 @@ public final class HandlerMethodValidator implements MethodValidator {
|
||||
Predicate<MethodParameter> modelAttribitePredicate, Predicate<MethodParameter> requestParamPredicate) {
|
||||
|
||||
if (initializer instanceof ConfigurableWebBindingInitializer configurableInitializer) {
|
||||
if (configurableInitializer.getValidator() instanceof Validator validator) {
|
||||
Validator validator = getValidator(configurableInitializer);
|
||||
if (validator != null) {
|
||||
MethodValidationAdapter adapter = new MethodValidationAdapter(validator);
|
||||
adapter.setObjectNameResolver(objectNameResolver);
|
||||
if (paramNameDiscoverer != null) {
|
||||
@@ -160,6 +162,17 @@ public final class HandlerMethodValidator implements MethodValidator {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Validator getValidator(ConfigurableWebBindingInitializer initializer) {
|
||||
if (initializer.getValidator() instanceof Validator validator) {
|
||||
return validator;
|
||||
}
|
||||
if (initializer.getValidator() instanceof SmartValidator smartValidator) {
|
||||
return smartValidator.unwrap(Validator.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ObjectNameResolver for web controller methods.
|
||||
|
||||
Reference in New Issue
Block a user