Bean Validation XML整个bean

时间:2017-10-24 09:11:03

标签: java xml validation bean-validation

必需使用XML进行bean验证。

我们可以通过在类声明之前放置注释来验证整个类。

@AtLeastOneNotNull
public class SampleBean {
    // ...
}

然后使用反射循环遍历字段。

如何使用XML bean验证实现相同的功能?

<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>my.package</default-package>
    <bean class="SampleBean">
        <!-- ? -->
    </bean>
</constraint-mappings>

我可以在<bean> <field>之后声明。

我的目标是使用XML bean验证来验证多个字段依赖项 例如:

  • 必须填写至少一个字段
  • 如果field1null,则field2不是

1 个答案:

答案 0 :(得分:1)

请查看documentation以获取Bean Validation 2.0(如果您仍然使用旧版本 - 这里是相同的link到1.0版本)示例9.2显示了您的需求:

<?xml version="1.0" encoding="UTF-8"?>
<constraint-mappings
        xmlns="http://xmlns.jcp.org/xml/ns/validation/mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/validation/mapping
            http://xmlns.jcp.org/xml/ns/validation/mapping/validation-mapping-2.0.xsd"
        version="2.0">
    <default-package>com.acme.app.domain</default-package>
    <bean class="Customer" ignore-annotations="false">
        <class ignore-annotations="true">
            [...]
        </class>
    </bean>

</constraint-mappings>

所以要回答你的问题,你应该能够:

<bean class="SampleBean" ignore-annotations="false">
    <class ignore-annotations="true">
        [...]
    </class>
</bean>

并定义您的约束。此外,如果您正在使用Hibernate Validator,您可能希望查看ScripAssert约束 - 它将允许您编写一个简单的脚本检查,并且您不需要编写自己的约束来检查至少一个字段是否为空。希望这会有所帮助。