自定义验证器和@interface列表

时间:2014-02-22 21:33:01

标签: java validation

我正在尝试做我的第一个自定义验证器。我定义了我的注释:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PojoValidator.class)
@Documented
public @interface Pojo {

  String message() default "invalid pojo";

  Class<?>[] groups() default {};

  Class<? extends Payload>[] payload() default {};

在网上的许多教程中,我在声明的最后看到了类似的内容:

@Target({ElementType.METHOD,
        ElementType.FIELD,
        ElementType.ANNOTATION_TYPE,
        ElementType.CONSTRUCTOR,
        ElementType.PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @interface List {
        Email[] value();
    }

这个@interface List的目的是什么,如何在我的例子中写出它是强制性的?

1 个答案:

答案 0 :(得分:1)

在Java 1.7中,您不能拥有相同类型的多个注释。围绕这个的方式是List。假设您有一个类级验证,以检查2个字段是否相等,并且您想要使用它两次(例如,验证passwd = repeatPasswd和email = repeatEmail:

@ValidateEquals.List({
    @ValidateEquals(field1 = "pwd", field2="repPwd"),
    @ValidateEquals(field1 = "email", field2="repEmail")
})
public class MyForm

不确定它是否是强制性的,但强烈建议用于类级验证器。