Provide callback mechanism for customizing validation configuration

See gh-29429
This commit is contained in:
当智才让
2022-01-16 16:02:17 +08:00
committed by Andy Wilkinson
parent f3aa5d0773
commit 76a1c6bcaa
4 changed files with 163 additions and 2 deletions

View File

@@ -16,8 +16,11 @@
package org.springframework.boot.autoconfigure.validation;
import java.util.List;
import jakarta.validation.Validator;
import jakarta.validation.executable.ExecutableValidator;
import jakarta.validation.valueextraction.ValueExtractor;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -28,8 +31,11 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.boot.autoconfigure.condition.ConditionalOnResource;
import org.springframework.boot.autoconfigure.condition.SearchStrategy;
import org.springframework.boot.validation.MessageInterpolatorFactory;
import org.springframework.boot.validation.beanvalidation.CustomizableLocalValidatorFactoryBean;
import org.springframework.boot.validation.beanvalidation.FilteredMethodValidationPostProcessor;
import org.springframework.boot.validation.beanvalidation.MethodValidationExcludeFilter;
import org.springframework.boot.validation.beanvalidation.customize.AddValueExtractorCustomizer;
import org.springframework.boot.validation.beanvalidation.customize.Customizer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
@@ -53,11 +59,20 @@ import org.springframework.validation.beanvalidation.MethodValidationPostProcess
@Import(PrimaryDefaultValidatorPostProcessor.class)
public class ValidationAutoConfiguration {
@Bean
public static AddValueExtractorCustomizer autoAddValueExtractorCustomizer(
@SuppressWarnings({ "rawtypes", "unchecked" }) List<ValueExtractor> valueExtractors) {
return new AddValueExtractorCustomizer(valueExtractors);
}
@Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@ConditionalOnMissingBean(Validator.class)
public static LocalValidatorFactoryBean defaultValidator(ApplicationContext applicationContext) {
LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
public static LocalValidatorFactoryBean defaultValidator(ApplicationContext applicationContext,
List<Customizer> customizers) {
CustomizableLocalValidatorFactoryBean factoryBean = new CustomizableLocalValidatorFactoryBean();
factoryBean.setCustomizers(customizers);
MessageInterpolatorFactory interpolatorFactory = new MessageInterpolatorFactory(applicationContext);
factoryBean.setMessageInterpolator(interpolatorFactory.getObject());
return factoryBean;