@NotNull, @NotBlank,@NotEmpty,你用对了吗?

开发
本文,我们详细地分析了@NotNull、@NotEmpty 和 @NotBlank 三个注解以及它们之间地对比。

@NotNull、@NotEmpty 和 @NotBlank 是 Java Bean Validation(如 Hibernate Validator)中常用的注解,用于校验字段的有效性。它们之间有不同的适用场景和约束条件。这篇文章,我们将详细解释它们的区别及使用场景。

1. @NotNull

@NotNull的作用是仅确保字段不为 null。因此,对于字符串来说,允许为空字符串 ("");对于集合等,也只检查是否为 null,不检查是否为空集合。

@NotNull适用于任何类型的对象(如字符串、集合、自定义对象等)。

如下示例,展示了@NotNull注解的使用:

public class User {
    @NotNull(message = "用户名不能为空")
    private String username;
}

2. @NotEmpty

@NotEmpty 的作用是确保字段不为 null,且不为空。因此,对于字符串来说,长度必须大于 0,""(空字符串)被认为是无效的;对于集合等,大小必须大于 0。

@NotEmpty 可以适用于以下几种类型:

  • String
  • Collection(如 List, Set)
  • Map
  • Array

如下示例,展示了@NotEmpty注解的使用::

public class User {
    @NotEmpty(message = "用户名不能为空")
    private String username;

    @NotEmpty(message = "角色列表不能为空")
    private List<String> roles;
}

3. @NotBlank

@NotBlank的作用是确保字符串不为 null,且.trim()后长度大于 0(即不仅不为空,还至少包含一个非空白字、制表符等)。

@NotBlank仅适用于 String 类型。

如下示例,展示了@NotBlank注解的使用:

public class User {
    @NotBlank(message = "密码不能为空")
    private String password;
}

4. 三者对比

下面通过一张图表,对三者进行详细的对比:

注解

适用类型

校验条件

@NotNull

任意引用类型

对象不为 null

@NotEmpty

String,Collection,Map,Array

对象不为 null,且长度或大小大于 0

@NotBlank

String

字符串不为 null,且.trim()后长度大于 0

5. 使用场景

  • @NotNull:当只需要确保某个字段被赋值(不关心内容)时。例如,用户的ID字段在数据库中不能为空。
  • @NotEmpty:当需要确保某个集合或字符串不仅被赋值,而且包含至少一个元素或字符时。例如,用户注册时需要至少有一个角色。
  • @NotBlank:当需要确保字符串不仅被赋值,而且包含实际的非空白字符时。例如,用户注册时的密码字段不能只是空格。

6. 示例代码

下面我们通过一个示例同时演示 3个注解的使用:

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

public class User {

    @NotNull(message = "用户ID不能为空")
    private Long id;

    @NotEmpty(message = "用户名不能为空")
    private String username;

    @NotBlank(message = "密码不能为空且不能全为空白")
    private String password;

    @NotEmpty(message = "角色列表不能为空")
    private List<String> roles;

    // Getters and Setters
}

在上述示例中:

  • id 只需要不为 null。
  • username 需要不为 null 且不为空字符串。
  • password 需要不为 null,不为空字符串,并且至少包含一个非空白字符。
  • roles 需要不为 null,且至少包含一个角色。

7. 总结

本文,我们详细地分析了三个注解以及它们之间地对比。@NotNull仅校验对象不为null,适用于所有引用类型;@NotEmpty确保集合、数组或字符串不为null且有长度;@NotBlank专用于字符串,要求不为null、不为空且包含非空白字符。根据字段类型和校验需求选择合适的注解,以确保数据的完整性和有效性。

通过合理使用这些注解,可以确保数据的完整性和有效性,减少潜在的运行时错误。

责任编辑:赵宁宁 来源: 猿java
相关推荐

2024-09-18 10:08:37

2022-05-09 07:27:50

ThreadLocaJava

2022-01-12 18:35:54

MongoDB数据查询

2017-10-10 15:30:20

JavaScript

2017-11-09 13:56:46

数据库MongoDB水平扩展

2024-12-10 13:00:00

C++引用

2023-11-29 07:38:33

JavaScript异步处理

2018-07-01 08:34:09

缓存数据服务

2020-09-18 06:39:18

hashMap循环数据

2024-02-23 09:36:57

C#工具并行处理

2019-05-28 11:52:43

可视化图表数据

2015-01-26 10:55:56

云服务器PowerEdge C

2019-12-26 14:07:19

随机数伪随机多线程

2019-09-10 10:25:47

数据库管理工具Valentina S

2011-07-15 11:15:29

上网行为管理

2020-08-04 08:37:23

Kafka分区数

2018-01-25 16:49:08

开源容器云编排工具

2018-07-04 06:26:00

无线路由器网络WiFi

2019-03-08 16:30:44

MySQPHP数据库
点赞
收藏

51CTO技术栈公众号