1 在 Java 中進行手動校驗 DTO 的方法有很多種,這里提供一種常用的校驗方法,使用 Hibernate Validator 實現:
2
3 1. 添加依賴
4
5 首先需要在 Maven 或 Gradle 中添加 Hibernate Validator 的依賴:
6
7 Maven:
8
9 ```xml
10 <dependency>
11 <groupId>org.hibernate.validator</groupId>
12 <artifactId>hibernate-validator</artifactId>
13 <version>6.2.0.Final</version>
14 </dependency>
15 ```
16
17 Gradle:
18
19 ```groovy
20 implementation 'org.hibernate.validator:hibernate-validator:6.2.0.Final'
21 ```
22
23 2. 創建 DTO 類
24
25 假設我們有一個 UserDTO 類需要校驗,此類中包含了一些必填字段和某些屬性的長度范圍限制。
26
27 ```java
28 public class UserDTO {
29 @NotBlank(message = "用戶名不能為空")
30 private String username;
31
32 @NotBlank(message = "密碼不能為空")
33 @Size(min = 6, max = 20, message = "密碼長度必須在 {min} 到 {max} 之間")
34 private String password;
35
36 @Email(message = "郵箱格式不正確")
37 private String email;
38
39 // getters and setters
40 }
41 ```
42
43 在類中使用注解來標記要校驗的字段,并為每個注解設置校驗規則。例如:
44
45 - `@NotBlank` 注解用來校驗字符串不能為空格或空字符串。
46 - `@Size` 注解用來校驗字符串、數組、集合或 Map 的大小是否在指定范圍內。
47 - `@Email` 注解用來校驗字符串是否符合電子郵件格式。
48
49 3. 編寫校驗邏輯
50
51 使用 Hibernate Validator 的 `Validator` 接口進行 DTO 的校驗:
52
53 ```java
54 import javax.validation.Validation;
55 import javax.validation.Validator;
56 import javax.validation.ValidatorFactory;
57 import java.util.Set;
58
59 public class UserValidator {
60 private static Validator validator;
61
62 static {
63 ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
64 validator = factory.getValidator();
65 }
66
67 public static boolean validate(UserDTO userDTO) {
68 Set<ConstraintViolation<UserDTO>> violations = validator.validate(userDTO);
69 if (violations.size() > 0) {
70 for (ConstraintViolation<UserDTO> violation : violations) {
71 System.out.println(violation.getMessage());
72 }
73 return false;
74 }
75 return true;
76 }
77 }
78 ```
79
80 在此示例中,我們創建了一個名為 `UserValidator` 的類,其中包含了一個 `validate` 方法用于執行校驗。
81
82 `ValidatorFactory` 和 `Validator` 的初始化應該在靜態代碼塊中完成,這樣所有的校驗操作都會共享一個實例,以提高效率。
83
84 `validate` 方法中,我們調用 `validator.validate` 方法來校驗傳入的 `UserDTO` 對象。如果校驗失敗,我們將依次輸出每個不合法字段對應的錯誤信息,并返回 false,表示 DTO 校驗失敗。否則,返回 true,表示 DTO 校驗通過。
85
86 4. 使用校驗邏輯
87
88 我們可以在需要校驗的地方調用上述校驗邏輯,例如:
89
90 ```java
91 public static void main(String[] args) {
92 UserDTO userDTO = new UserDTO();
93 userDTO.setUsername("");
94 userDTO.setPassword("1234");
95 userDTO.setEmail("invalid-email");
96
97 boolean valid = UserValidator.validate(userDTO);
98 if (!valid) {
99 System.out.println("DTO validation failed");
100 }
101 }
102 ```
103
104 在此示例中,我們創建了一個 UserDTO 對象,并設置其中的一些不合法屬性。然后調用 `UserValidator.validate` 方法進行校驗,如果返回 false,則說明 DTO 校驗失敗。