动态xml文件配置 hibernate validator 约束校验
父文章 入参校验产品化 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 fileInputStream inputStream = new FileInputStream("constraints.txt");String constraints = new String(inputStream.readAllBytes());// Parse constraint definitions using Hibernate ValidatorValidatorFactory factory = Validation.byDefaultProvider().configure().addMapping(new ByteArrayInputStream(constraints.getBytes())).buildValidatorFactory();Validator validator = factory.getValidator();// Validate configuration using Hibernate ValidatorConfig config = new Config();config.setName("John");config.setAge(17);Set<ConstraintViolation<Config>> violations = validator.validate(config);// Print validation errorsif (!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) 两个约束。