尽管这不是 Bean Validation API 的用途,但您可以使用它执行此验证。我假设您将使用Hibernate Validator,它是 BV API 的参考实现。
您可以使用简单的验证器来解决负面检查。修改@Field 为
@Constraint(validatedBy = MyFieldValidator.class)
public @interface Field {
String type();
int order();
}
并创建一个MyFieldValidator
类如下
public class MyFieldValidator implements ConstraintValidator<Field, Object> {
private int order;
@Override
public void initialize(Field annotation) {
this.order = annotation.order();
if (this.order < 0) {
// blow up
}
}
@Override
public boolean isValid(Object object, ConstraintValidatorContext constraintContext) {
return true;
}
}
如果您随后将对象放入验证器,例如 using Validation.buildDefaultValidatorFactory().getValidator().validate(someUser)
,则任何负序注释属性都将失败。
防止重复更棘手。最明智的选择是在User
类级别放置一个验证注释,然后使用反射来一一获取注释。使用类级别注解的优点是它为您提供了一种简单的方法来告诉 Hibernate Validator 要检查哪些类。不太好的部分是您可能会忘记注释类。