【问题标题】:Hibernate validator doesn't use properties file.Hibernate 验证器不使用属性文件。
【发布时间】:2013-10-24 14:10:50
【问题描述】:
我已经实现了一个带有休眠和休眠验证的 bean。这是我正在测试的领域。
@NotBlank(message ="test.test" )
private String test;
我有一个文件
messages.properties
和
messages_en.properties
我使用的。 Spring.message 标签起作用,因此可以找到文件并在系统其他地方使用。当我尝试在messages.properties中存储该字段为空而不是错误消息的对象时,我得到“test.test”作为我的验证错误。我错过了什么?
【问题讨论】:
标签:
java
hibernate
internationalization
hibernate-validator
【解决方案1】:
您应该尝试用花括号将键名括起来。此语法与本地化文件中的 Java 不同。紧随其后的是 Spring/Hibernate Validation thru Validation API。
@NotBlank(message="{test.test}")
private String test;
【解决方案2】:
问题是我的配置中缺少这个。 message="{test.test}" 也是必要的。
<mvc:annotation-driven validator="validator" />
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="messageInterpolator">
<bean class="org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator">
<constructor-arg index="0">
<bean
class="org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator">
<constructor-arg index="0" ref="messageSource" />
</bean>
</constructor-arg>
</bean>
</property>
</bean>
【解决方案3】:
只有以下对我有用:
-
在 maven 项目的“resources”目录中创建 ValidationMessages.properties,使用以下消息属性:
app.validation.notempty.msg=must be populated
-
然后,在 dto 类中:
@NotEmpty(message = "{app.validation.notempty.msg}")
private String fieldName;
-
最终验证如下图。请注意我发现提供者 HibernateValidator.class 是强制性的才能从 .properties 文件中获取值。
ValidatorFactory factory = Validation.byProvider(
HibernateValidator.class )
.configure()
.buildValidatorFactory();
Validator validator = factory.getValidator();
希望这对某人有所帮助。