SpringBoot中@Email验证异常:输入perisava.util.Random@1d7f0036无报错
解决Spring Boot @Email校验无法识别
perisava.util.Random@1d7f0036的问题 这个问题看起来是因为你自定义的邮箱正则表达式存在潜在问题:要么规则不够严格,要么转义/锚点缺失导致非标准格式被误判为合法邮箱。下面给你两种可行的解决方案:
方案一:使用@Email的默认校验规则(推荐)
Hibernate Validator(Spring Boot默认使用的校验框架)的@Email注解自带了经过验证的默认正则表达式,足以排除类名@哈希码这种不符合标准邮箱格式的字符串。你只需要移除自定义的regexp参数即可:
@Email(message = "Email is not valid") @NotEmpty(message = "Email cannot be empty") private String email;
这样修改后,perisava.util.Random@1d7f0036会因为@后面的部分不是合法域名(缺少必要的后缀,比如.com、.org或合法IP)而被校验拒绝。
方案二:修正自定义正则表达式
如果你必须使用自定义正则,需要做两个关键调整:
- 给正则加上首尾锚点
^和$,确保整个字符串完全匹配邮箱格式,而不是部分匹配。 - 确保@后面的部分必须是带点的合法域名,或者是方括号包裹的合法IP(排除纯字母数字串的情况)。
修正后的代码示例:
@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]?)\\])$") @NotEmpty(message = "Email cannot be empty") private String email;
关键说明:
- 首尾锚点
^和$强制要求整个字符串严格匹配正则规则,避免部分匹配导致的误判。 - 修正后的@后面部分,要么是带点的域名(比如
example.com),要么是方括号包裹的IP(比如[192.168.1.1]),直接排除了1d7f0036这种纯字母数字串的情况。
内容的提问来源于stack exchange,提问作者en Peris
相关产品推荐
相关产品推荐

