在日常开发过程中,大家经常使用@NotNull、@NotEmpty、@NotBlank等注解来实现我们对参数的校验,这些注解的使用不仅能为我们减少很多不必要的重复校验代码,还能够使得我们的代码看起来更加优雅。但由于这三个注解的作用类似,很多朋友在开发过程中,往往容易使用混淆,所以在这里给大家讲解一下如何正确的使用这些注解。
首先,先明确一下,我们使用的这几个注解所在的包
javax.validation.constraints.NotNull
javax.validation.constraints.NotBlank
javax.validation.constraints.NotEmpty
1. @NotNull
-
作用:确保字段不为
null
。 -
适用场景:任何可以是
null
的对象字段(如Integer
、String
、集合类型等)。 -
特点:只判断是否为
null
,不关心对象内部的内容,比如字符串长度或集合是否为空。 -
常见用法:
public class User { @NotNull(message = "ID不能为空") private Integer id; }
- 用于确保字段有值,特别是必需字段的校验。
- 常见于数据库 ID 或者外键字段,确保不为
null
。
2. @NotEmpty
-
作用:确保集合、数组或字符串字段不为
null
且不为空(长度大于 0)。 -
适用场景:用于集合(如
List
、Set
、Map
)、数组,以及字符串类型。 -
特点:检查字段不为
null
且包含至少一个元素或字符。 -
常见用法:
public class Book { @NotEmpty(message = "书名不能为空") private String title; @NotEmpty(message = "标签列表不能为空") private List<String> tags; }
- 用于确保集合类型、数组类型、字符串不为空。
- 常用于表单、接口请求中,要求提交非空字符串、列表等字段的校验。
3. @NotBlank
-
作用:确保字符串不为
null
且至少包含一个非空白字符(忽略空格、制表符等)。 -
适用场景:仅用于
String
类型。 -
特点:更严格的字符串校验,不仅判断
null
和空串,还排除只有空格的情况。 -
常见用法:
public class Comment { @NotBlank(message = "评论内容不能为空") private String content; }
- 用于确保输入的字符串有实际内容,避免只填空格的情况。
- 常用于表单字段中,特别是需要确保用户输入有效内容的场景。
使用总结
注解 | 主要作用 | 适用类型 | 判断标准 | 典型场景 |
---|---|---|---|---|
@NotNull | 确保字段不为 null | 所有对象类型 | 不为 null | 基本字段、主键、外键等需要有值的情况 |
@NotEmpty | 确保集合、字符串不为空 | 集合、数组、字符串 | 不为 null 且至少包含一个元素或字符 | 集合、数组需要至少有一个有效值的情况 |
@NotBlank | 确保字符串有实际内容 | 字符串 | 不为 null ,且至少有一个非空白字符 | 输入需要有实际内容的情况(避免空白输入) |
上面就是我们使用的这三个注解的具体区别,还有各自的领域与含义。
并且我们在使用的时候,还需要注意一点,那就是在使用的时候,在参数的位置需要添加上@Validated,否则我们的注解也是不起作用的。