我有一个自定义字段注释类,有两个属性,如下所示:
public @interface Field {
String type();
int order();
}
我想验证订单,它不应该是负值,不应该重复,例如:
class User {
@Field(uiType = "TEXT", order = 1)
private String fName;
@Field(uiType = "TEXT", order = 2)
private String lName;
}
任何人都可以帮我做吗?
最佳答案 虽然这不是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;
}
}
然后,如果您通过验证器放置对象,例如使用Validation.buildDefaultValidatorFactory().getValidator().validate(someUser),任何负序注释属性都将失败.
防止重复是比较棘手的. sanest选项是在User类级别放置验证注释,然后使用反射逐个获取注释.使用类级别注释的优点是它为您提供了一种简单的方法来告诉Hibernate Validator要检查哪些类.不太重要的是你可能会忘记给课堂注释.