使用XML时,Hibernate验证程序国际化

使用XML时,Hibernate验证程序国际化,xml,internationalization,constraints,hibernate-validator,Xml,Internationalization,Constraints,Hibernate Validator,我将hibernate validator与xml一起使用,如下所示: <constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"

我将hibernate validator与xml一起使用,如下所示:

<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
                     xmlns="http://jboss.org/xml/ns/javax/validation/mapping">
    <default-package>org.hibernate.validator.quickstart</default-package>
    <bean class="com.totempool.persistence.data.User" ignore-annotations="true">
        <field name="firstName">
            <constraint annotation="javax.validation.constraints.NotNull"/>
            <constraint annotation="javax.validation.constraints.Min">
                <element name="value">2</element>
            </constraint>
        </field>
        <field name="lastName">
            <constraint annotation="javax.validation.constraints.NotNull"/>
            <constraint annotation="com.totempool.persistence.constraint.IpValid"/>
            <constraint annotation="javax.validation.constraints.Min">
                <element name="value">2</element>
            </constraint>
        </field>
        <field name="phones">
            <constraint annotation="javax.validation.constraints.NotNull"/>
        </field>
    </bean>
    <constraint-definition annotation="com.totempool.persistence.constraint.IpValid">
        <validated-by include-existing-validators="false">
            <value>com.totempool.persistence.constraint.IpValidImplementation</value>
        </validated-by>
    </constraint-definition>
</constraint-mappings>
并使用.properties文件将消息国际化。我试过了,但运气不好。我发现的所有其他信息都使用注释和非xml。所以,如果有人能提供一个教程,我可以用一些方法来做这件事,或者告诉我这是否可能,这将是完美的

编辑

这是一个异常,当我尝试为约束设置一个特定值时,我尝试更改消息名称,但不起作用

  Caused by: javax.validation.ValidationException: HV000113: message, groups, payload are reserved parameter names."}}

如果只想国际化内置约束的默认消息,则不需要修改消息参数值。只需将ValidationMessages.properties或任何子区域设置(取决于要使用的语言)放入类路径的根目录中,并使用默认键,例如:

javax.validation.constraints.NotNull.message=My NotNull message
如果您希望每个属性都有特定的消息,例如名字的特定消息,那么确实需要在XML中添加一些内容

<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
                     xmlns="http://jboss.org/xml/ns/javax/validation/mapping">
    <default-package>org.hibernate.validator.quickstart</default-package>
    <bean class="com.totempool.persistence.data.User" ignore-annotations="true">
        <field name="firstName">
            <constraint annotation="javax.validation.constraints.NotNull">
                <element name="message">{user.firstName.message}</element>
            </constraint>
...
</constraint-mappings>

重要的是不要忘记消息参数中的{}。他们告诉验证引擎它处理一个消息键,它需要根据验证消息包解析该键。

嗨,第一部分:javax.validation.constraints.NotNull.message=我的NotNull消息确实有效,但当我尝试指定我自己的消息时,它会说消息是保留字,请参阅编辑谢谢查找解决方案{user.firstName.message},谢谢
<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
                     xmlns="http://jboss.org/xml/ns/javax/validation/mapping">
    <default-package>org.hibernate.validator.quickstart</default-package>
    <bean class="com.totempool.persistence.data.User" ignore-annotations="true">
        <field name="firstName">
            <constraint annotation="javax.validation.constraints.NotNull">
                <element name="message">{user.firstName.message}</element>
            </constraint>
...
</constraint-mappings>
user.firstName.message=The first name cannot be null