@email 是 jakarta bean validation 提供的邮箱格式校验注解,基于 rfc 5322 做轻量语义检查,支持 null、不验证域名真实性,需配合 @validated 使用,不支持中文邮箱及非法点号格式。

@Email 是 Jakarta Bean Validation 规范中提供的标准注解,用于校验字符串是否符合基本的邮箱格式(如 user@domain.com),不是正则硬匹配,而是基于 RFC 5322 的轻量级语义检查。
基础用法:加在字段上即可生效
只需在目标字段(必须是 String 类型)上添加 @Email 注解,并确保所在类被 Spring 的校验机制触发(比如用 @Valid 或 @Validated):
- 字段声明示例:@Email(message = "邮箱格式不合法") private String email;
- 该注解默认允许 null 值——即字段为 null 不会报错;若要求非空,需额外加 @NotBlank 或 @NotNull
- 它不验证邮箱域名是否存在、MX 记录是否有效,也不校验长度上限,仅做语法层面合理性判断
配合 @Validated 使用的典型场景
Spring Boot 中需显式启用校验,常见组合方式如下:
- Controller 方法参数带 @Validated(或 @Valid),且实体类字段含 @Email —— 适用于 @RequestBody 或表单绑定
- 单个 String 参数校验(如 @Email String email)时,Controller 类必须标注 @Validated,否则注解不生效
- 若使用 Lombok 的 @Data/@Setter,注意 @Email 仍需写在字段上,不会被生成方法绕过
注意事项和常见误区
@Email 看似简单,但几个细节容易踩坑:
- 它不兼容中文邮箱(如 张三@公司.中国),这类地址会校验失败
- 本地部分含点号连续(如 user..name@domain.com)、开头或结尾带点、含空格等均视为非法
- message 属性支持占位符,例如 message = "邮箱 {validatedValue} 格式错误",其中 {validatedValue} 会自动替换为实际传入值
- 若需更严格控制(如限定域名白名单、禁止某些后缀),应自定义注解 + ConstraintValidator 实现











