使用 XML 时 Hibernate 验证器国际化
Hibernate validator internationalize when using XML
我将休眠验证器与 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."}}
如果你只是想国际化一个(内置)约束的默认消息,你不需要修改消息参数值。只需将 ValidationMessages.properties
(或任何子区域设置,具体取决于您要使用的语言)放入 class 路径的根目录并使用默认键,例如:
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
重要的是不要忘记消息参数中的 {}。他们告诉验证引擎它处理一个消息密钥,它需要根据验证消息包解析该密钥。
我将休眠验证器与 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."}}
如果你只是想国际化一个(内置)约束的默认消息,你不需要修改消息参数值。只需将 ValidationMessages.properties
(或任何子区域设置,具体取决于您要使用的语言)放入 class 路径的根目录并使用默认键,例如:
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
重要的是不要忘记消息参数中的 {}。他们告诉验证引擎它处理一个消息密钥,它需要根据验证消息包解析该密钥。