Use MessageSource to interpolate bean validation messages

See gh-17530
This commit is contained in:
Dmytro Nosan
2019-07-16 09:56:28 +03:00
committed by Andy Wilkinson
parent ea9b155776
commit bbb8367afb
10 changed files with 460 additions and 5 deletions

View File

@@ -28,6 +28,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnResource;
import org.springframework.boot.validation.MessageInterpolatorFactory;
import org.springframework.boot.validation.beanvalidation.FilteredMethodValidationPostProcessor;
import org.springframework.boot.validation.beanvalidation.MethodValidationExcludeFilter;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@@ -54,9 +55,10 @@ public class ValidationAutoConfiguration {
@Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
@ConditionalOnMissingBean(Validator.class)
public static LocalValidatorFactoryBean defaultValidator() {
public static LocalValidatorFactoryBean defaultValidator(ApplicationContext applicationContext) {
LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
MessageInterpolatorFactory interpolatorFactory = new MessageInterpolatorFactory();
interpolatorFactory.setMessageSource(applicationContext);
factoryBean.setMessageInterpolator(interpolatorFactory.getObject());
return factoryBean;
}

View File

@@ -114,7 +114,7 @@ public class ValidatorAdapter implements SmartValidator, ApplicationContextAware
if (existing != null) {
return wrap(existing, true);
}
return create();
return create(applicationContext);
}
private static Validator getExisting(ApplicationContext applicationContext) {
@@ -130,10 +130,11 @@ public class ValidatorAdapter implements SmartValidator, ApplicationContextAware
}
}
private static Validator create() {
private static Validator create(ApplicationContext applicationContext) {
OptionalValidatorFactoryBean validator = new OptionalValidatorFactoryBean();
try {
MessageInterpolatorFactory factory = new MessageInterpolatorFactory();
factory.setMessageSource(applicationContext);
validator.setMessageInterpolator(factory.getObject());
}
catch (ValidationException ex) {