@NotNull Vs @NotBlank Vs @NotEmpty,你用对了吗?
你好,我是猿java。
@NotNull
、@NotEmpty
和 @NotBlank
是 Java Bean Validation(如 Hibernate Validator)中常用的注解,用于校验字段的有效性。它们之间有不同的适用场景和约束条件。这篇文章,我们将详细解释它们的区别及使用场景。
1. @NotNull
@NotNull
的作用是仅确保字段不为 null
。因此,对于字符串来说,允许为空字符串 (""
);对于集合等,也只检查是否为 null
,不检查是否为空集合。
@NotNull
适用于任何类型的对象(如字符串、集合、自定义对象等)。
如下示例,展示了@NotNull
注解的使用:
1 | public class User { |
2. @NotEmpty
@NotEmpty
的作用是确保字段不为 null
,且不为空。因此,对于字符串来说,长度必须大于 0,""
(空字符串)被认为是无效的;对于集合等,大小必须大于 0。
@NotEmpty
可以适用于以下几种类型:
String
Collection
(如List
,Set
)Map
Array
如下示例,展示了@NotEmpty
注解的使用::
1 | public class User { |
3. @NotBlank
@NotBlank
的作用是确保字符串不为 null
,且.trim()后长度大于 0(即不仅不为空,还至少包含一个非空白字、制表符等)。
@NotBlank
仅适用于 String
类型。
如下示例,展示了@NotBlank
注解的使用:
1 | public class User { |
4. 三者对比
下面通过一张图表,对三者进行详细的对比:
注解 | 适用类型 | 校验条件 |
---|---|---|
@NotNull |
任意引用类型 | 对象不为 null |
@NotEmpty |
String ,Collection ,Map ,Array |
对象不为 null ,且长度或大小大于 0 |
@NotBlank |
String |
字符串不为 null ,且.trim()后长度大于 0 |
5. 使用场景
@NotNull
:当只需要确保某个字段被赋值(不关心内容)时。例如,用户的ID字段在数据库中不能为空。@NotEmpty
:当需要确保某个集合或字符串不仅被赋值,而且包含至少一个元素或字符时。例如,用户注册时需要至少有一个角色。@NotBlank
:当需要确保字符串不仅被赋值,而且包含实际的非空白字符时。例如,用户注册时的密码字段不能只是空格。
6. 示例代码
下面我们通过一个示例同时演示 3个注解的使用:
1 | import javax.validation.constraints.NotBlank; |
在上述示例中:
id
只需要不为null
。username
需要不为null
且不为空字符串。password
需要不为null
,不为空字符串,并且至少包含一个非空白字符。roles
需要不为null
,且至少包含一个角色。
7. 总结
本文,我们详细地分析了三个注解以及它们之间地对比。@NotNull
仅校验对象不为null
,适用于所有引用类型;@NotEmpty
确保集合、数组或字符串不为null
且有长度;@NotBlank
专用于字符串,要求不为null
、不为空且包含非空白字符。根据字段类型和校验需求选择合适的注解,以确保数据的完整性和有效性。
通过合理使用这些注解,可以确保数据的完整性和有效性,减少潜在的运行时错误。
8. 学习交流
如果你觉得文章有帮助,请帮忙转发给更多的好友,或关注公众号:猿java,持续输出硬核文章。