SpringBoot 中的 javax.validation.constraints.Email

en *_*ris 5 java email spring email-validation spring-boot

我有一个经过此验证的 bean:

@Email(message = "Email is not valid", regexp="{(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])}")
@NotEmpty(message = "Email cannot be empty")
private String email;
Run Code Online (Sandbox Code Playgroud)

当电子邮件为空时,消息很好,但是当我输入此文本时

perisava.util.Random@1d7f0036
Run Code Online (Sandbox Code Playgroud)

没有显示错误

Sha*_*rup 9

javax.validation.constraints.Email注释依赖Jakarta Bean Validation providers于验证。Hibernate Validator 是唯一符合此要求的验证器。默认情况下,hibernate vaildator 将电子邮件与正则表达式匹配.*,除非您自己提供正则表达式。Hibernate 电子邮件验证器源代码在这里

一种解决方案是提供您自己的电子邮件正则表达式

@Email(message = "Email is not valid", regexp = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$")
@NotEmpty(message = "Email cannot be empty")
private String email;
Run Code Online (Sandbox Code Playgroud)

官方标准是 RFC 5322。但它并没有涵盖现代电子邮件的所有情况。您可以在这里找到更多解决方案。即使如此,正则表达式也将由您决定。