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 {
/* ... */
}