父文章
入参校验产品化 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());
}
}
}
}
在这个示例中,我们首先定义了一个 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) 两个约束。