Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.validation.constraints.Email匹配无效的电子邮件地址_Java_Spring Mvc_Spring Validator - Fatal编程技术网

javax.validation.constraints.Email匹配无效的电子邮件地址

javax.validation.constraints.Email匹配无效的电子邮件地址,java,spring-mvc,spring-validator,Java,Spring Mvc,Spring Validator,我有一个用户实体,其电子邮件属性用@email @Email private String email; 我正在控制器类上使用@Valid(javax.validation.Valid)注释。问题是控制器验证程序正在传递无效电子邮件。示例: pusp@1-显然这是一个无效的电子邮件地址 pusp@fake 我注意到的模式是,@电子邮件只想要sometext@text,它不关心扩展(.com/org等)。这是预期的行为吗?我是否需要为@Email(regex=“”)传递我自己的regex实现,根

我有一个
用户
实体,其电子邮件属性用
@email

@Email
private String email;
我正在控制器类上使用
@Valid
(javax.validation.Valid)注释。问题是控制器验证程序正在传递无效电子邮件。示例:
pusp@1-显然这是一个无效的电子邮件地址
pusp@fake

我注意到的模式是,
@电子邮件
只想要sometext@text,它不关心扩展(.com/org等)。这是预期的行为吗?我是否需要为
@Email(regex=“”)

传递我自己的regex实现,根据验证程序,没有
的电子邮件可能被视为有效。
一般来说,验证器实现(这里可能是Hibernate验证器)对电子邮件没有太多限制。
例如,javadoc声明:

有效电子邮件的规格可在和中找到 可以找到匹配所有有效电子邮件的正则表达式 地址符合规范要求但是,正如所讨论的那样 实施100%符合要求的电子邮件并不一定切实可行 验证程序。此实现是一种折衷方案,试图匹配大多数 忽略电子邮件,例如带有双引号或 评论

作为补充,我注意到了类似的事情,HTML邮件验证程序

所以我认为你遇到的行为实际上是你所期望的。
关于你的问题:

我是否需要为@Email(regex=“”)传递我自己的regex实现

的确如此。如果要使验证更具限制性,您没有其他选择。
作为替代方案,通过约束组合创建自己的验证器非常有趣,因为它是干的(您可以重用自定义的
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 {};
}
@电子邮件(message=“请提供有效的电子邮件地址”)
@模式(regexp=“.++.+\\..+”,message=“请提供有效的电子邮件地址”)
@目标({方法,字段,注释类型})
@保留(运行时)
@约束(validatedBy={})
@记录
public@interface ExtendedEmailValidator{
String message()默认为“请提供有效的电子邮件地址”;
类[]组()默认值{};
CLASS两个“明显无效”的地址实际上都是合法的(如果不是很有用的话)。