@NotNull只校验非null,适用于所有引用类型;@NotEmpty额外校验“非空内容”,要求字符串trim后长度>0、集合size>0,仅支持String/Collection/Map/数组。

@NotEmpty 和 @NotNull 都是用来防止 null 值进入业务逻辑的校验注解,但它们检查的“空”不是一回事:@NotNull 只防 null,@NotEmpty 还额外防“空内容”。
@NotNull:只管是否为 null
适用于所有引用类型(String、Integer、List、Map 等),只要字段值不是 null 就算通过。它完全不关心内容是不是空字符串、空集合或全是空格。
- String name = null → 校验失败
- String name = "" 或 " " → 校验通过(因为不是 null)
-
List
roles = new ArrayList() → 校验通过(非 null,只是空集合) - Integer age = 0 或 null → null 失败,0 通过
@NotEmpty:既防 null,也防“无实质内容”
支持 String、Collection、Map、数组等类型。它要求对象不能为 null,且必须有“实际内容”:
-
String:不能为 null,且
str.trim().length() > 0(即去空格后长度大于 0) -
List / Set / Map / 数组:不能为 null,且
size() > 0(不能是空集合) - String name = null 或 "" 或 "\t\n " → 全部失败
-
List
list = new ArrayList() → 失败(size == 0) -
List
list = Arrays.asList("a") → 通过
@NotBlank:专为 String 设计的“强空判断”
这是三者中限制最严的 String 专用注解:必须非 null,且 trim 后长度 > 0。它和 @NotEmpty 对 String 的效果一致,但语义更明确、类型更受限——不能用在 List 或 Integer 上,否则编译报错。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 只接受 String 类型,IDE 和框架会做类型检查
- 比 @NotEmpty 更精准表达“用户输入不能只填空格”这一业务意图
- 如果误标在 Integer 字段上,直接编译失败,避免运行时漏校验
怎么选?看字段类型和业务需求
简单记三句话:
- 字段是 Integer/Long/Boolean 等包装类?只能用 @NotNull
- 字段是 String,且业务要求“不能只输空格”?优先用 @NotBlank(语义清、类型安全)
- 字段是 List/Map/数组,要确保“有数据”?必须用 @NotEmpty(@NotBlank 不支持)
注意:Spring Boot 2.3+ 需显式引入 spring-boot-starter-validation,否则这些注解不会生效。










