java - 带消息的 Hibernate 约束映射 validator

标签 java hibernate-validator

这里是 validation.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.1.xsd"
                 xmlns="http://jboss.org/xml/ns/javax/validation/mapping" version="1.1">
<default-package>com.esq.rbac.model</default-package>
<bean class="Tenant" ignore-annotations="true">
    ...
    <field name="ivrPin">
        <constraint annotation="javax.validation.constraints.Size">
            <element name="min">6</element>
            <element name="max">6</element>
            <message>IVR Pin must be 6 digit numeric</message>
        </constraint>
        <constraint annotation="javax.validation.constraints.Pattern">
            <element name="regexp">[0-9]+</element>
        </constraint>
    </field>
</bean>

执行过程中报错

c.e.u.imports.Main [run] - HV000115: Error parsing mapping file.
javax.validation.ValidationException: HV000115: Error parsing mapping file.
Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: 
Invalid content was found starting with element 'message'. One of '{"http://jboss.org/xml/ns/javax/validation/mapping":element}' is expected.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)

如何正确包含错误信息

最佳答案

您只需将 message 直接放在 constraint annotation 标记之后,element 标记之前进行更改即可。

<bean class="Tenant" ignore-annotations="true">
...
<field name="ivrPin">
    <constraint annotation="javax.validation.constraints.Size">
        <message>IVR Pin must be 6 digit numeric</message>
        <element name="min">6</element>
        <element name="max">6</element>

    </constraint>

原因如下:

如果您查看用于验证映射的 xsd 文件:

validation-mapping-1.1.xsd

<xs:complexType name="constraintType">
    <xs:sequence>
        <xs:element type="xs:string" name="message" minOccurs="0"/>
        <xs:element type="map:groupsType"
                    name="groups"
                    minOccurs="0"/>
        <xs:element type="map:payloadType"
                    name="payload"
                    minOccurs="0"/>
        <xs:element type="map:elementType"
                    name="element"
                    maxOccurs="unbounded"
                    minOccurs="0"/>
    </xs:sequence>
    <xs:attribute type="xs:string" name="annotation" use="required"/>
</xs:complexType>

它使用 xs:sequence 标签指定子元素必须按顺序出现。引用element sequence .这里的 message 属性位于 groupspayloadelement 等其他属性之前。

关于java - 带消息的 Hibernate 约束映射 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41499928/

相关文章:

java - 用于 war 部署的外部资源与内部资源,例如 Tomcat

Java 对 getSource() 和 Action 监听器的理解

java - 缩写词 "Spitter"代表什么?

java - 即使违反约束,Hibernate validator 也会执行 JAX-RS REST 端点

java - 如何将 UTF8 属性文件与 Vaadin Bean 验证结合使用

java - 如何解码未包装的集合以使用 jaxb 进行映射

java - Java 中的元素间距

java - java中的自定义bean验证

spring-mvc - Spring MVC & JSR 303 验证导致错误 400

java - Hibernate-validator:如何使用包含格式 "${...}"的变量插入消息?