动态xml文件配置 hibernate validator 约束校验

  • Post author:
  • Post category:其他


父文章

入参校验产品化 schema_个人渣记录仅为自己搜索用的博客-CSDN博客

一般都是通过 注解进行校验, 很少看到 通过配置来进行校验.

自己再通过谷歌找到了官网文档hibernate validator constraint from xml


Hibernate Validator 8.0.0.Final – Jakarta Bean Validation Reference Implementation: Reference Guide

Q :  动态 java 约束写在 文本中, 读取文本, 对bean进行校验

A : 如下

<dependency>

<groupId>org.hibernate.validator</groupId>

<artifactId>hibernate-validator</artifactId>

<version>8.0.0.Final</version>

</dependency>

<dependency>

<groupId>jakarta.validation</groupId>

<artifactId>jakarta.validation-api</artifactId>

<version>3.0.2</version>

</dependency>

在 Java 中,可以使用 Hibernate Validator 的编程式 API 来读取约束定义,然后使用这些约束定义对 Java Bean 进行校验。这种方式可以将约束定义写在文本文件中,然后在运行时动态加载这些约束定义。

以下是一个使用编程式 API 进行约束校验的示例:

public class Config {
    private String name;
    private int age;

    // getters and setters
}

public class ConfigValidator {
    public static void main(String[] args) throws IOException {
        // Load constraint definitions from text file
        InputStream inputStream = new FileInputStream("constraints.txt");
        String constraints = new String(inputStream.readAllBytes());

        // Parse constraint definitions using Hibernate Validator
        ValidatorFactory factory = Validation.byDefaultProvider().configure()
                .addMapping(new ByteArrayInputStream(constraints.getBytes()))
                .buildValidatorFactory();
        Validator validator = factory.getValidator();

        // Validate configuration using Hibernate Validator
        Config config = new Config();
        config.setName("John");
        config.setAge(17);
        Set<ConstraintViolation<Config>> violations = validator.validate(config);

        // Print validation errors
        if (!violations.isEmpty()) {
            for (ConstraintViolation<Config> violation : violations) {
                System.out.println(violation.getMessage());
            }
        }
    }
}


https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#_adding_mapping_streams

在这个示例中,我们首先定义了一个 Config 类,它包含了一些属性。然后,我们创建了一个 ConfigValidator 类,它读取了一个名为 constraints.txt 的文本文件,并使用 Hibernate Validator 将其解析为约束定义。接下来,我们使用这些约束定义对 Config 对象进行验证,并将验证结果存储在 ConstraintViolation 对象的集合中。如果存在验证错误,则可以遍历 ConstraintViolation 对象并输出错误消息。

在 constraints.txt 文件中,我们可以使用 Hibernate Validator 的约束定义语言来定义约束。例如,以下是一个 constraints.txt 文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<bean-validation-config xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration validation-configuration-2.0.xsd">
    <constraint-mappings>
        <bean class="com.example.Config">
            <field name="name">
                <constraint annotation="javax.validation.constraints.NotNull"/>
            </field>
            <field name="age">
                <constraint annotation="javax.validation.constraints.Min">
                    <element name="value">18</element>
                </constraint>
            </field>
        </bean>
    </constraint-mappings>
</bean-validation-config>

在这个示例中,我们使用 XML 格式定义了一个约束映射,它包含了一个 Config 类的约束定义。我们使用 field 元素来指定要验证的属性,然后使用 constraint 元素来指定要应用的约束。在这个例子中,我们使用了 @NotNull 和 @Min(18) 两个约束。



版权声明:本文为fei33423原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。