Browse Source

Unwrap validator if necessary in HandlerMethodValidator

See gh-31082
pull/31113/head
rstoyanchev 2 years ago
parent
commit
35ba53e918
  1. 15
      spring-web/src/main/java/org/springframework/web/method/annotation/HandlerMethodValidator.java

15
spring-web/src/main/java/org/springframework/web/method/annotation/HandlerMethodValidator.java

@ -27,6 +27,7 @@ import org.springframework.core.ParameterNameDiscoverer; @@ -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 { @@ -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 { @@ -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.

Loading…
Cancel
Save