是否可以使用Hibernate Validation

时间:2015-09-24 08:17:21

标签: java hibernate validation

我们在一个项目中使用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代码。有办法吗?

1 个答案:

答案 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);

手动验证时,您可以指定要通过组类运行的验证。如果未指定,则假定为默认组。