java – 如何验证自定义注释属性?

我有一个自定义字段注释类,有两个属性,如下所示:

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要检查哪些类.不太重要的是你可能会忘记给课堂注释.

点赞