Java 使用内置批注创建自定义验证批注

Java 使用内置批注创建自定义验证批注,java,validation,hibernate-validator,Java,Validation,Hibernate Validator,在我工作的系统中,用户名必须是电子邮件或手机号 我正在使用验证bean 我想创建一个自定义注释@Username,这样它就可以验证bean属性是email还是单元格号 电子邮件可以通过@Email进行验证,而手机号可以通过@Pattern的正则表达式进行验证,但我不知道如何编写自定义验证器,以便可以重用上述内置注释 我参考了创建自定义验证器的部分 基本上我的问题是, 我如何使用内置的验证注释(@Email和@Pattern)来组成一个新的注释@Username,以便@Username验证一个属性

在我工作的系统中,
用户名
必须是
电子邮件
手机号

我正在使用验证bean

我想创建一个自定义注释
@Username
,这样它就可以验证bean属性是
email
还是
单元格号

电子邮件可以通过
@Email
进行验证,而手机号可以通过
@Pattern
的正则表达式进行验证,但我不知道如何编写自定义验证器,以便可以重用上述内置注释

我参考了创建自定义验证器的部分

基本上我的问题是,

我如何使用内置的验证注释(
@Email
@Pattern
)来组成一个新的注释
@Username
,以便
@Username
验证一个属性是
Email
还是
单元格编号

// @Email or @Pattern("...") ???
@Target(FIELD)
@Retention(RUNTIME)
@Constraint(validatedBy = {})
@Documented
public @interface Username {
   /* ... */
}

如果您想要符合Bean验证,就不能。没有约束的概念或组成。但是,如果您使用的是Hibernate Validator,并且您对特定于提供程序的功能没有异议,那么您可以在Hibernate Validator中使用布尔组合-

@Target(FIELD)
@Retention(RUNTIME)
@Constraint(validatedBy = {})
@Documented
@ConstraintComposition(OR)
@Email
@Pattern("...")
public @interface Username {
   /* ... */
}