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 校验失败。