@NotBlank、@NotEmpty、@NotNull
@NotBlank、@NotEmpty 和 @NotNull 通常与 Bean Validation 规范(JSR 303/383) 或其实现库(如 Hibernate Validator)配合使用。这些注解用于数据校验,它们的使用逻辑与类型和业务场景相关,以下是具体原因:
总结
| 注解 | 适用类型 | 校验规则 |
|---|---|---|
@NotBlank |
String |
非空,且不全是空白字符(如 "abc" ✅,null ❌,"" ❌," " ❌) |
@NotEmpty |
集合(List等) |
非空,且至少有一个元素(如 [1,2] ✅,null ❌,[] ❌) |
@NotNull |
所有对象类型 | 非空(如 new Date() ✅,null ❌) |
1. @NotBlank(针对 String 类型)
- 作用:校验字符串是否 非空 且 不全是空白字符(如空格、换行、制表符等)。
- 适用场景:当需要确保字符串 有实际内容 时使用,例如用户名、密码、表单输入等。
- 示例:
@NotBlank(message = "名称不能为空或空白") private String name; - 区别于
@NotNull:@NotBlank会先检查字符串是否为null,然后再检查是否为空字符串或全空白字符。而@NotNull仅检查是否为null,不关心内容是否为空。
2. @NotEmpty(针对 List、Set、Map 等集合类型)
- 作用:校验集合是否 非空 且 至少包含一个元素。
- 适用场景:当需要确保集合 有实际元素 时使用,例如订单中的商品列表、用户角色列表等。
- 示例:
@NotEmpty(message = "商品列表不能为空") private List<Product> products; - 区别于
@NotNull:@NotEmpty会先检查集合是否为null,然后再检查是否为空集合(size() == 0)。而@NotNull仅检查是否为null,不关心集合是否为空。
3. @NotNull(针对 Date、对象等通用类型)
- 作用:校验对象是否 非空(即不为
null)。 - 适用场景:当需要确保字段 存在有效值,但不关心其具体值是否“空”时使用。例如日期字段、实体对象引用等。
- 示例:
@NotNull(message = "创建时间不能为空") private Date createTime; - 区别于其他注解:
@NotNull是最基础的校验,仅检查对象是否为null,不关心其内部状态(如Date是否是合法日期、字符串是否为空等)。
为什么针对不同类型使用不同的注解?
- 类型特性差异:
- 字符串:需要排除全空白字符的情况(如用户输入
" ")。 - 集合:需要确保集合中至少有一个元素(如订单必须有商品)。
- 对象/日期:只需确保对象存在(如
Date对象可以是过去的日期,但不能为空引用)。
- 字符串:需要排除全空白字符的情况(如用户输入
- 业务需求:
- 不同类型的数据校验规则不同。例如,一个
Date字段可能允许任何日期值(只要不为null),但一个List必须至少包含一个元素才能有意义。
- 不同类型的数据校验规则不同。例如,一个

浙公网安备 33010602011771号