【问题标题】:Hibernate validator internationalize when using XML使用 XML 时 Hibernate 验证器国际化
【发布时间】:2015-02-26 16:00:15
【问题描述】:

我正在使用带有 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>

我的问题是我需要国际化默认提供的消息,我知道使用注释时可以这样做

message="{theMessage}" 

并使用 .properties 文件将消息国际化。我试过这个Post 但没有运气。我发现的所有其他信息都在使用注释,而不是使用 xml。因此,如果有人可以提供教程,我可以使用一些方法来做到这一点或告诉我这是否可能是完美的。

编辑

这是当我尝试将特定值放入约束时出现的异常,我尝试更改消息名称但不起作用

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

【问题讨论】:

    标签: xml internationalization constraints hibernate-validator


    【解决方案1】:

    如果你只是想国际化一个(内置)约束的默认消息,你不需要修改消息参数值。只需将 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>
    

    然后在你的属性文件中添加:

    user.firstName.message=The first name cannot be null
    

    重要的是不要忘记消息参数中的 {}。它们告诉验证引擎它处理消息密钥,并且需要根据验证消息包解析密钥。

    【讨论】:

    • 嗨,第一部分:javax.validation.constraints.NotNull.message=我的 NotNull 消息确实有效,但是当我尝试指定我自己的消息时,它说消息是保留字,请参阅编辑谢谢
    • 找到解决方案 {user.firstName.message} ,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    相关资源
    最近更新 更多