Unwrap validator if necessary in HandlerMethodValidator

See gh-31082
This commit is contained in:
rstoyanchev 2023-08-23 11:50:47 +03:00
parent 942800e8ec
commit 35ba53e918
1 changed files with 14 additions and 1 deletions

View File

@ -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.