@Pattern,@NotBlank

1. @NotBlank:非空神器

意思: 只能用于 String 。它要求字符串既不能为 null,长度也必须大于 0,且不能全是空格

  • 对比:

    • @NotNull: 只要不是 null 就算过。"" (空字符串) 能通过。

    • @NotEmpty: 不能为 null 且长度 > 0。" " (全是空格) 能通过。

    • @NotBlank : 最严格。null""" " 统统不准过。

使用场景: 用户名、密码、地址等必填文本。


2. @Pattern:正则大杀器

意思: 验证字符串是否符合你定义的 正则表达式

  • 属性: regexp 传入正则表达式。

使用场景: 手机号、邮箱、身份证号、邮编等有固定格式的字符串。


3. 实战代码演示

假设你要写一个用户注册的接口,你的 DTO(数据传输对象)应该长这样:

Java

复制代码
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;

public class UserRegisterDTO {

    @NotBlank(message = "用户名不能为空")
    private String username;

    @NotBlank(message = "手机号不能为空")
    @Pattern(
        regexp = "^1[3-9]\\d{9}$", 
        message = "手机号格式不正确"
    )
    private String phoneNumber;

    // 省略 getter/setter
}

关键点: 要想让这些注解生效,你在 Controller 的方法参数前必须加上 @Valid@Validated 注解!

Java

复制代码
@PostMapping("/register")
public Result register(@Validated @RequestBody UserRegisterDTO dto) {
    // 如果校验失败,Spring 会直接抛出异常或返回 400,根本进不到这一行
    return Result.success();
}
相关推荐
倔强的石头_3 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
云技纵横3 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
沉默王二3 天前
面试官:RAG 不用向量数据库,用 MySQL 硬扛?我:100 万向量不是很轻松?
mysql·面试·ai编程
冬奇Lab4 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
小猿姐4 天前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
ClouGence4 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
云技纵横4 天前
Gap Lock 死锁实战:5 秒在本地复现 MySQL 间隙锁死锁
后端·mysql
无响应de神4 天前
三、用户与权限管理
数据库·mysql
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql