根据验证者的说法,没有的电子邮件可能被视为有效。
一般来说,验证器实现(这里可能是Hibernate Validator)对电子邮件的限制不是很大。
例如,org.hibernate.validator.internal.constraintvalidators.AbstractEmailValidator
javadoc 声明:.
可以在RFC 2822中找到有效电子邮件的规范,并且可以根据规范提出与所有有效电子邮件地址匹配的正则表达式。但是,正如本文所讨论的那样,实现100%兼容的电子邮件验证器不一定可行。此实现是一种权衡,试图匹配大多数电子邮件,同时忽略例如带有双引号或注释的电子邮件。
顺便说一句,我注意到HTML Validator对电子邮件也有类似的了解。
所以我认为你遇到的行为实际上是预期的。
关于您的问题:
我需要为@Email传递我自己的正则表达式实现吗(正则表达式=“”)
事实上。如果要使验证更具限制性,则没有任何其他选择。
作为替代方案,这个答案通过约束组合创建自己的验证器非常有趣,因为它是DRY(您可以在每次不指定模式的情况下重用您的自定义,因为它将被包含在其中),并且它重用了:ConstraintValidator
@Email
ConstraintValidator
@Email(message="Please provide a valid email address")
@Pattern(regexp=".+@.+\\..+", message="Please provide a valid email address")
@Target( { METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = {})
@Documented
public @interface ExtendedEmailValidator {
String message() default "Please provide a valid email address";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}