@notnull校验是否为null,允许空字符串和空集合;@notblank仅用于string,要求非null且trim后长度大于0;@notempty适用于string、集合等,要求非null且size>0;三者须配合@valid/@validated及spring-boot-starter-validation依赖才能生效。

Spring Boot 中用 @NotNull、@NotBlank、@NotEmpty 做参数校验,关键不是“加了就行”,而是“加对位置、配对类型、配齐触发机制”。三者语义不同,错用会直接导致校验失效或启动报错。
@NotNull:专治“没值”,不关心有没有内容
检查对象是否为 null,但允许是空字符串("")、空集合([])、0 或 false。适用于所有引用类型,包括 String、Integer、List、Map 等。
- String name; → @NotNull 允许 name = "",只拦 name = null
- Integer age; → 必须用 @NotNull,不能用 @NotEmpty 或 @NotBlank(后者会抛
HV000030异常) - Boolean isActive; → 同样只能用 @NotNull
@NotBlank:专治“假内容”,只认 String
只作用于 String 类型,要求:不为 null + trim() 后长度 > 0。也就是说," "(纯空格)、""、null 全部被拒绝。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 适合用户名、昵称、标题等“必须有真实文字”的字段
- 写在 Integer、List 上会编译通过但运行时报错,IDE 通常也会标黄警告
- 自动去除首尾空格再判断,不用自己写 trim()
@NotEmpty:专治“空壳”,覆盖多类型
适用于 String、Collection、Map、Array 等,要求:不为 null 且 size/length > 0。对 String 来说,等价于 s != null && !s.isEmpty(),但不会 trim。
- String phone = " "; → @NotEmpty 会通过(非 null,长度 > 0),但业务上可能不合理
- List
tags; → @NotEmpty 可确保列表存在且至少含一个元素 - 和 @NotBlank 比:更宽泛(支持集合),但对字符串更宽松(不 trim)
必须配齐的三个动作
光加注解没用,缺一不可:
- 引入依赖:
spring-boot-starter-validation - 实体类字段上加对应注解(如 @NotBlank)
- Controller 方法参数前加 @Valid(RequestBody)或 @Validated(@RequestParam/@PathVariable)
例如:
@PostMapping("/user")
public Result save(@Valid @RequestBody User user) { ... }
User 类中 String username 字段标注 @NotBlank,此时才会真正拦截空格串或 null。










