diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/HandlerMethodValidator.java b/spring-web/src/main/java/org/springframework/web/method/annotation/HandlerMethodValidator.java index 830254788bd..1b33506f3c3 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/HandlerMethodValidator.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/HandlerMethodValidator.java @@ -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 modelAttribitePredicate, Predicate 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.