我们在一个项目中使用 Hibernate Validation 很长时间了,它效果很好。 但我想知道是否可以仅按需运行某些验证,而不是在 validator 上调用 valid() 时或保存之前运行。 例如我有一个类:
@ValidationOne
@ValidationTwo
@Entity
public class MyClass{
...
}
ValidationOne 和 ValidationTwo 由接口(interface)定义,如 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 {};
}
validator 类遵循验证 API 规范:
public class ValidationOneValidator implements ConstraintValidator<ValidationOne, MyClass>{
...
}
这些验证运行良好。但现在我想知道 ValidationOne 上的条件在我的 Controller 中是否在特定方法上为真。我不想重复 ValidationOneValidator 代码。有办法做到吗?
最佳答案
看到注释定义上的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);
手动验证时,您可以指定要通过组类运行的验证。如果您不指定,则采用默认组。
关于java - 是否可以使用 Hibernate Validation 运行一项具体验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32756557/