Волшебный метод, который выполняет требуемую работу: LocalValidatorFactoryBean # setValidationMessageSource (MessageSource messageSource) .
Прежде всего, контракт метода: -
Укажите настраиваемый источник сообщений Spring для разрешения проверки
сообщения, а не полагаться на
JSR-303 по умолчанию
Пакет "ValidationMessages.properties"
в пути к классам. Это может относиться к
Общий контекст весны
bean-компонент messageSource или некоторым
специальная настройка MessageSource для
только для проверки.
ПРИМЕЧАНИЕ. Для использования этой функции требуется режим гибернации.
Валидатор 4.1 или выше на
CLASSPATH. Тем не менее, вы можете использовать
другой поставщик проверки, но
Спящий Валидатор
ResourceBundleMessageInterpolator
класс должен быть доступен во время
конфигурации.
Укажите либо это свойство, либо
"messageInterpolator", а не оба. Если
Вы хотели бы создать кастом
MessageInterpolator, рассмотрите возможность получения
из спящего валидатора
ResourceBundleMessageInterpolator и
проходя весной
MessageSourceResourceBundleLocator
при построении вашего интерполятора.
Вы можете указать свои собственные свойства message.properties (или .xml), вызвав этот метод ... вот так ...
мой-beans.xml
<bean name="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource">
<ref bean="resourceBundleLocator"/>
</property>
</bean>
<bean name="resourceBundleLocator" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>META-INF/validation_errors</value>
</list>
</property>
</bean>
validation_errors.properties
javax.validation.constraints.NotNull.message=MyNotNullMessage
Person.java
class Person {
private String firstName;
private String lastName;
@NotNull
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
BeanValidationTest.java
public class BeanValidationTest {
private static ApplicationContext applicationContext;
@BeforeClass
public static void initialize() {
applicationContext = new ClassPathXmlApplicationContext("classpath:META-INF/spring/webmvc-beans.xml");
Assert.assertNotNull(applicationContext);
}
@Test
public void test() {
LocalValidatorFactoryBean factory = applicationContext.getBean("validator", LocalValidatorFactoryBean.class);
Validator validator = factory.getValidator();
Person person = new Person();
person.setLastName("dude");
Set<ConstraintViolation<Person>> violations = validator.validate(person);
for(ConstraintViolation<Person> violation : violations) {
System.out.println("Custom Message:- " + violation.getMessage());
}
}
}
Outupt: Custom Message:- MyNotNullMessage