@Email 专用于邮箱基础格式校验,语义明确但不校验存在性;@Pattern 通过正则实现灵活定制,可限定域名、密码强度等;二者可组合使用,先 @Email 兜底再 @Pattern 增强限制。

在 Spring Boot 中,@Email 和正则校验(@Pattern)是两种常用且互补的字段格式验证方式。它们都属于 Bean Validation(JSR-303/JSR-380)规范,用法简单,但适用场景和细节有明显区别。
@Email 注解:专用于邮箱格式基础校验
@Email 是标准校验注解,语义明确、开箱即用,适合快速验证邮箱基本格式是否合法(如含 @、域名结构等)。它不校验邮箱是否存在或是否可投递,仅做语法层面判断。
- 默认只检查格式,不强制要求非空——需搭配
@NotBlank或@NotNull - 支持自定义 message,例如:
@Email(message = "请输入有效的邮箱地址") - 若需更严格规则(如限定域名后缀),单靠
@Email不够,得补正则
@Pattern 注解:灵活控制任意字符串格式
@Pattern 通过正则表达式实现高度定制化校验,适用于邮箱、手机号、身份证号、密码强度等复杂格式场景。写法关键是正则要准确、边界要清晰(建议加 ^ 和 $ 锚定首尾)。
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
- 示例:强制邮箱必须为
@gmail.com或@qq.com结尾@Pattern(regexp = "^[a-zA-Z0-9._%+-]+@(gmail\.com|qq\.com)$", message = "仅支持 Gmail 或 QQ 邮箱") - 密码强度示例(至少1个大写+1个小写+1数字+8位以上):
@Pattern(regexp = "^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,}$", message = "密码需包含大小写字母和数字,长度不少于8位") - 注意:正则中特殊字符(如点、括号)要转义,Java 字符串里反斜杠需写双份(
\.)
两者可以一起用,分工明确
推荐组合策略:先用 @Email 做通用邮箱语法兜底,再用 @Pattern 做业务侧增强限制。这样既保持语义清晰,又兼顾灵活性。
- 比如注册接口中对 email 字段同时标注:
@NotBlank<br>@Email(message = "邮箱格式不正确")<br>@Pattern(regexp = "^.+@company\.com$", message = "仅限公司邮箱注册")
- 校验顺序无强制要求,Spring 会依次执行所有注解;任一失败即中断并返回对应错误信息
别忘了启用校验和统一处理异常
光写注解没用,必须确保三点:
- pom.xml 引入
spring-boot-starter-validation - DTO 类字段上正确添加注解,并在 Controller 方法参数前加
@Valid(@RequestBody场景)或@Validated(支持分组) - 配置全局异常处理器捕获
MethodArgumentNotValidException,提取FieldError中的 message 和 field,返回友好提示










