.根据验证者,不带电子邮件的电子邮件可能被视为有效。
通常,验证器实现(这里可能是Hibernate Validator)对电子邮件的限制不是很严格。
例如
org.hibernate.validator.internal.constraintvalidators.AbstractEmailValidatorjavadoc指出:
有效电子邮件的规范可以在RFC 2822中找到,并且可以提供一个正则表达式,该规范匹配符合规范的所有有效电子邮件地址。 但是,正如
本文所讨论的,实现100%兼容的电子邮件验证器不一定实际。此实现是一种折衷方案,它尝试匹配大多数电子邮件,而忽略例如带有双引号或注释的电子邮件。
另外,我注意到HTML Validator用于电子邮件的类似情况。
因此,我认为您实际遇到的行为是预期的。
关于你的问题:
我需要为@Email(regex =“”)传递自己的正则表达式实现吗?
确实。如果要使验证更具限制性,则别无选择。
作为替代方案,通过约束组合创建自己的验证程序的答案非常有趣,因为它是DRY(您可以重复使用自定义,
ConstraintValidator而无需在每次指定要包含的模式时都进行指定),并且可以重复使用
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 = {})@documentedpublic @interface ExtendedEmailValidator { String message() default "Please provide a valid email address"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};}


