【问题标题】:Bean Validation XML entire beanBean Validation XML 整个 bean
【发布时间】:2017-10-24 09:11:03
【问题描述】:

我必须通过 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>

&lt;bean&gt; 之后我只能声明&lt;field&gt;。

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

  • 必须填写至少一个字段
  • 如果field1 是null 那么field2 不是

【问题讨论】:

    标签: java xml validation bean-validation


    【解决方案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 约束——它允许您编写一个简单的脚本检查,并且您不需要编写自己的约束来检查是否至少一个文件不为空。希望这会有所帮助。

    【讨论】:

    • 感谢您的解决方案并提供文档链接。不知道为什么使用XSD的自动补全只建议field。
    猜你喜欢
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 2011-07-19
    • 2017-01-16
    • 1970-01-01
    相关资源
    最近更新 更多