Spring Boot手动调用Validator实现
介绍
在使用Spring Boot进行开发时,经常需要对请求参数进行校验,保证数据的有效性和一致性。Spring Boot提供了Validator接口和相关注解,可以方便地实现参数校验。本文将教会你如何在Spring Boot中手动调用Validator进行参数校验。
流程概述
下面是整个流程的步骤概述,详细的步骤将在后面进行展开说明。
journey
title Spring Boot手动调用Validator实现流程
section 1. 准备工作
Step 1: 创建Spring Boot项目
Step 2: 添加依赖
section 2. 创建DTO类
Step 3: 创建DTO类
Step 4: 添加校验注解
section 3. 创建自定义Validator
Step 5: 创建自定义Validator类
Step 6: 实现校验逻辑
section 4. 手动调用Validator
Step 7: 注入Validator
Step 8: 调用Validator校验
section 5. 测试
Step 9: 编写测试用例
Step 10: 运行测试用例
section 6. 总结
Step 11: 总结
准备工作
Step 1: 创建Spring Boot项目
首先,使用IDE工具(如IntelliJ IDEA)创建一个新的Spring Boot项目。
Step 2: 添加依赖
在pom.xml
文件中添加Spring Boot Web和Validation的依赖:
<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>
创建DTO类
Step 3: 创建DTO类
创建一个DTO(数据传输对象)类,用于接收请求参数。例如,我们创建一个名为UserDTO
的类:
public class UserDTO {
private String username;
private String password;
// getters and setters
}
Step 4: 添加校验注解
在DTO类的字段上使用校验注解,以定义参数校验规则。例如,我们为username
字段添加@NotBlank
注解,表示该字段不能为空:
public class UserDTO {
@NotBlank(message = "Username cannot be blank")
private String username;
private String password;
// getters and setters
}
创建自定义Validator
Step 5: 创建自定义Validator类
创建一个自定义的Validator类,用于实现参数校验的逻辑。例如,我们创建一个名为UserValidator
的类:
@Component
public class UserValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return UserDTO.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
// 校验逻辑
}
}
Step 6: 实现校验逻辑
在validate
方法中,我们可以编写校验逻辑。可以使用errors
对象来添加校验错误信息。例如,我们实现一个简单的校验逻辑,要求密码不能小于6位:
@Override
public void validate(Object target, Errors errors) {
UserDTO userDTO = (UserDTO) target;
if (userDTO.getPassword().length() < 6) {
errors.rejectValue("password", "Password length must be at least 6");
}
}
手动调用Validator
Step 7: 注入Validator
在需要调用Validator的地方注入它。例如,我们可以在Controller类中注入UserValidator
:
@RestController
public class UserController {
private final Validator validator;
public UserController(Validator validator) {
this.validator = validator;
}
// ...
}
Step 8: 调用Validator校验
在需要进行参数校验的方法中,我们可以调用Validator的validate
方法进行校验。例如,我们在Controller的某个接口方法中进行校验:
@PostMapping("/users")
public ResponseEntity<?> createUser(@RequestBody UserDTO userDTO) {
// 手动调用Validator进行参数校验
Set<ConstraintViolation<UserDTO>> violations = validator.validate