完成所需工作的神奇方法是LocalValidatorFactoryBean#setValidationMessageSource(MessageSource messageSource)。
首先,該法的合同: -
指定自定義春天的MessageSource解決驗證 的消息,而不是依賴於 JSR-303的默認 「ValidationMessages.properties」 捆綁 在類路徑中。這可能是指 Spring上下文的共享 「messageSource」bean,或者某些 特殊MessageSource設置僅用於 驗證目的。
注:此功能需要在 類路徑休眠 驗證4.1或更高版本。您仍然可以使用不同的驗證提供程序,但 Hibernate驗證程序的 ResourceBundleMessageInterpolator 類必須在 配置期間可訪問。
指定此屬性或 「messageInterpolator」,而不是兩者。如果 你想建立一個定製 MessageInterpolator,考慮Hibernate驗證的 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
在哪裏使用驗證器基於註釋的配置中的bean(不含XML的完整Java配置)。 – karthi 2017-06-28 07:32:29