Hibernate验证器不使用属性文件。

时间:2013-10-24 14:10:50

标签: java hibernate internationalization hibernate-validator

我已经实现了一个带有hibernate和hibernate验证的bean。这是我正在测试的领域。

@NotBlank(message ="test.test" )
private String test;

我有一个文件

  

messages.properties

 messages_en.properties
我使用的是。 Spring.message标签工作,因此可以找到文件并在其他地方的系统中使用。当我尝试将该字段的对象存储为空而不是message.properties中的错误消息时,我将“test.test”作为我的验证错误。我错过了什么?

3 个答案:

答案 0 :(得分:2)

你应该通过用大括号括起键名来尝试这样做。此语法与本地化文件中的Java不同。接下来是通过Validation API进行Spring / Hibernate验证。

@NotBlank(message="{test.test}") private String test;

答案 1 :(得分:1)

问题是我在配置中遗漏了这个。还需要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>

答案 2 :(得分:0)

只有下面的内容对我有用:

  1. 使用以下消息属性在maven项目的“ resources”目录中创建ValidationMessages.properties:

    app.validation.notempty.msg=must be populated
    
  2. 然后,在dto类中:

    @NotEmpty(message = "{app.validation.notempty.msg}")
    private String fieldName;
    
  3. 最终验证如下所示。请注意我发现提供程序HibernateValidator.class是必需的,以便从.properties文件中获取值。

    ValidatorFactory factory = Validation.byProvider( 
    HibernateValidator.class )
            .configure()
            .buildValidatorFactory();
    Validator validator = factory.getValidator();
    

希望这对某人有帮助。