【发布时间】:2026-01-12 11:50:01
【问题描述】:
用例:
假设这是我的 POJO:
class Sample{
String field1;
String field2;
double field3;
LocalDateTime field4;
LocalDateTime field5;
//...getters, setters and parameterised constructor
}
我正在从外部文件读取某些值并使用参数化构造函数创建 POJO。所有字段都有一定的验证约束。
我正在寻找的是一种在我使用参数化构造函数创建对象时自动评估这些约束的方法。如果一个或多个验证约束失败,它应该抛出一个错误。
到目前为止我所做的尝试:
我通过创建自己的注解和验证器在 Spring 中尝试了 Bean 验证方法。代码如下:
POJO
@ValidChecker(groups = Default.class)
class Sample{
String field1;
String field2;
double field3;
LocalDateTime field4;
LocalDateTime field5;
//...getters, setters and parameterised constructor
}
ValidChecker 注释
@Constraint(validatedBy = DataValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidChecker {
String message() default "Data is not valid";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
DataValidator.java
@SupportedValidationTarget(ValidationTarget.ANNOTATED_ELEMENT)
public class DataValidator implements ConstraintValidator<ValidChecker, ValidationData> {
@Override
public void initialize(ValidChecker constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
}
@Override
public boolean isValid(ValidationData validationData, ConstraintValidatorContext constraintValidatorContext) {
if (validationData == null) {
return false;
}
if (BigDecimal.valueOf(validationData.getField3()).scale() != 2) {
return false;
}
if (validationData.getField5().isBefore(validationData.getField4())) {
return false;
}
return true;
}
}
上面的代码不起作用。
需要的建议
- 上述方法存在问题
- 使用 Spring 的替代方法
- 使用某些第三方库的替代方法
我看了很多,但找不到没有 Spring bean 验证的方法。有人可以帮忙吗?
【问题讨论】:
标签: java spring-boot validation java-8 pojo