- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试覆盖 hibernate 验证 4.1 中的默认 ResourceBundleLocator。到目前为止,它运行良好,但其用法的唯一示例包括用于实例化 ValidationFactory 的 Java 代码。
当使用带有 spring hibernate validation 的 web 应用程序时,自动配置(只有合适的 hibernate validation *.jar 文件应该存在并自动使用)。在那种情况下我如何替换 ResourceBundleLocator?我没有在任何属性或 applicationContext.xml 文件中看到任何指定我的自定义 ResourceBundleLocator 的方法。
最佳答案
完成所需工作的神奇方法是 LocalValidatorFactoryBean#setValidationMessageSource(MessageSource messageSource) .
首先,方法的契约:-
Specify a custom Spring MessageSource for resolving validation messages, instead of relying on JSR-303's default "ValidationMessages.properties" bundle in the classpath. This may refer to a Spring context's shared "messageSource" bean, or to some special MessageSource setup for validation purposes only.
注意:此功能需要 Hibernate Validator 4.1 或更高版本 类路径。你仍然可以使用 不同的验证提供者,但 Hibernate validator 的 ResourceBundleMessageInterpolator 类(class)期间必须可以访问 配置。
指定此属性或 “messageInterpolator”,而不是两者。如果 你想建立一个自定义 MessageInterpolator,考虑推导 来自 Hibernate Validator 的 ResourceBundleMessageInterpolator 和 路过一个 Spring MessageSourceResourceBundleLocator 在构建插值器时。
您可以通过调用此方法来指定您的自定义 message.properties(或 .xml)...就像这样...
my-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());
}
}
}
输出: 自定义消息:- MyNotNullMessage
关于java - Hibernate Validator、自定义 ResourceBundleLocator 和 Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4186556/
我正在尝试覆盖 hibernate 验证 4.1 中的默认 ResourceBundleLocator。到目前为止,它运行良好,但其用法的唯一示例包括用于实例化 ValidationFactory 的
我有一个 spring 项目,我在其中使用如下 validator : 当我运行该项目时,我得到以下 BeanCreationException: org.spri
我有一个 spring 项目,我在其中使用如下 validator : 当我运行该项目时,我得到以下 BeanCreationException: org.spri
我是一名优秀的程序员,十分优秀!