我们在一个项目中使用Hibernate Validation已经很长时间了,而且效果很好。 但我想知道是否可以按需运行某些验证,而不是在验证器上调用valid()或保存之前。 例如,我有一个班级:
@ValidationOne
@ValidationTwo
@Entity
public class MyClass{
...
}
ValidationOne和ValidationTwo由接口定义为Validation Api说:
@Target({ ElementType.TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = ValidationOneValidator.class)
@Documented
public @interface ValidationOne {
String message() default "{ValidationOne.invalid.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
验证器类遵循Validation API规范:
public class ValidationOneValidator implements ConstraintValidator<ValidationOne, MyClass>{
...
}
这些验证运行正常。但现在我想知道在我的控制器中,ValidationOne上的条件是否为真,在特定方法上。我不想复制ValidationOneValidator代码。有办法吗?
答案 0 :(得分:1)
请参阅注释定义中的groups()
属性?它允许您使用类来指定要运行的验证。
例如,让我们假设:
public class SingleRun {}
@ValidationOne(groups={SingleRun.class, javax.validation.groups.Default.class})
@ValidationTwo
@Entity
public class MyClass{...}
这允许您像这样运行单个验证:
javax.validation.Validator validator = ...;
MyClass myClass = ...;
validator.validate(myClass, SingleRun.class);
手动验证时,您可以指定要通过组类运行的验证。如果未指定,则假定为默认组。