Bean 验证 XML 整个 bean

Bean Validation XML entire bean

需要使用bean验证XML。

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

@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 验证来验证多个字段依赖关系。
例如:

请检查 documentation for Bean Validation 2.0 (If you still use the older version - here's the same 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 约束 - 它允许您编写一个简单的脚本检查,并且您不需要编写自己的约束来检查是否至少有一个文件不为空。希望这有帮助。