java 中 @NotBlank 和 @NotNull 的区别
在 Java 中,@NotBlank
和 @NotNull
是用于数据验证的注解(通常来自 Jakarta Bean Validation 规范,如 Hibernate Validator 实现)。它们的核心区别如下:
1. @NotNull
作用:验证对象是否为
null
。适用范围:任何类型(包括对象、集合、数组、字符串等)。
行为:
如果值为
null
→ 验证失败 ❌如果值不为
null
→ 验证通过 ✅(即使字符串是空字符串""
或空白字符串" "
也通过!)
示例:
public class User {@NotNull // 只要求不为 nullprivate String name; }// 测试: user.setName(null); // 验证失败 ❌ user.setName(""); // 验证通过 ✅ user.setName(" "); // 验证通过 ✅ user.setName("John"); // 验证通过 ✅
2. @NotBlank
作用:验证字符串 非
null
、非空字符串、非纯空白字符串。适用范围:仅限
String
类型。行为:
值必须满足:
不为
null
长度
> 0
(即不是""
)至少包含一个非空白字符(即不能是
" "
)
底层会调用
String.trim().isEmpty()
进行判断。
示例:
public class User {@NotBlank // 要求非 null + 非空 + 非空白private String name; }// 测试: user.setName(null); // 验证失败 ❌ user.setName(""); // 验证失败 ❌ user.setName(" "); // 验证失败 ❌ user.setName("John"); // 验证通过 ✅
关键区别总结
特性 | @NotNull | @NotBlank |
---|---|---|
检查内容 | 仅检查 null | 检查 null + 空字符串 + 纯空白字符串 |
适用类型 | 任意类型(对象、集合、字符串等) | 仅限 String 类型 |
空字符串 "" | ✅ 通过 | ❌ 失败 |
空白字符串 " " | ✅ 通过 | ❌ 失败 |