@NotNull, @NotBlank,@NotEmpty,你用對了嗎?
@NotNull、@NotEmpty 和 @NotBlank 是 Java Bean Validation(如 Hibernate Validator)中常用的注解,用于校驗字段的有效性。它們之間有不同的適用場景和約束條件。這篇文章,我們將詳細解釋它們的區(qū)別及使用場景。
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字段在數(shù)據(jù)庫中不能為空。
- @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確保集合、數(shù)組或字符串不為null且有長度;@NotBlank專用于字符串,要求不為null、不為空且包含非空白字符。根據(jù)字段類型和校驗需求選擇合適的注解,以確保數(shù)據(jù)的完整性和有效性。
通過合理使用這些注解,可以確保數(shù)據(jù)的完整性和有效性,減少潛在的運行時錯誤。