Validation 定义扩展现有one-javaEE的自定义验证注释

Validation 定义扩展现有one-javaEE的自定义验证注释,validation,java-ee-6,Validation,Java Ee 6,我想定义一个自定义的@DateOfBirthValid验证注释,该注释使用@Pattern注释,以便我定义一次出生日期模式,并在任何地方使用它。。。我知道我可以使用@Constraint(validatedBy=SomeClass.class)来定义它,然后在SomeClass中定义isValid()方法,但是我想知道是否有更直接的方法来使用@Pattern注释并给它我想要的出生日期正则表达式。。。原因是我希望在代码中的许多地方使用相同的验证注释,而无需再次从以下位置定义模式: Bean验证包括

我想定义一个自定义的
@DateOfBirthValid
验证注释,该注释使用
@Pattern
注释,以便我定义一次出生日期模式,并在任何地方使用它。。。我知道我可以使用
@Constraint(validatedBy=SomeClass.class)
来定义它,然后在
SomeClass
中定义
isValid()
方法,但是我想知道是否有更直接的方法来使用
@Pattern
注释并给它我想要的出生日期正则表达式。。。原因是我希望在代码中的许多地方使用相同的验证注释,而无需再次从以下位置定义模式

Bean验证包括几个内置约束,这些约束可以组合起来创建新的、可重用的约束。这可以通过允许开发人员定义由多个内置约束组成的自定义约束来简化约束定义,这些约束可以通过单个注释应用于组件属性

在链接中的示例中,您可以看到如何使用
@Pattern
创建电子邮件验证批注:

@Pattern.List({
  @Pattern(regexp = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\."
    +"[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*"
    +"@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
})
@Constraint(validatedBy = {})
@Documented
@Target({ElementType.METHOD,
    ElementType.FIELD,
    ElementType.ANNOTATION_TYPE,
    ElementType.CONSTRUCTOR,
    ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface Email {

    String message() default "{invalid.email}";

    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();
    }
}
那么它应该是可用的,比如

@DateOfBirthValid
protected String myString
或者以链接中的示例为例

然后可以将此自定义约束应用于属性

@DateOfBirthValid
protected String myString
...
@Email
protected String email;
...