java 手动校验dto

发布时间 2023-05-05 19:31:54作者: longlinji
  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 校验失败。
View Code