📅  最后修改于: 2023-12-03 15:20:13.796000             🧑  作者: Mango
在 Web 应用中,我们经常需要对用户提交的数据进行验证,以确保数据的合法性和安全性。Spring Boot 提供了一种方便的方式来实现数据验证,即通过验证器(Validator)来进行手动验证。
验证器是一种用于验证数据的工具,它可以检查数据是否符合指定的规则和条件。在 Spring Boot 中,验证器通常实现了 org.springframework.validation.Validator
接口,该接口定义了两个方法:
public interface Validator {
boolean supports(Class<?> clazz);
void validate(Object target, Errors errors);
}
其中 supports
方法用于判断当前验证器是否支持所验证的数据类型,validate
方法用于实施验证逻辑。当数据不符合要求时,可以通过 Errors
对象记录错误信息。
要创建一个验证器,我们可以创建一个实现 Validator
接口的类。例如,以下代码中的 UserValidator
验证器用于验证用户对象:
@Component
public class UserValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return User.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
User user = (User) target;
if (StringUtils.isBlank(user.getUsername())) {
errors.rejectValue("username", "不能为空");
}
if (StringUtils.isBlank(user.getPassword())) {
errors.rejectValue("password", "不能为空");
}
}
}
可以发现,在 supports
方法中,我们根据当前验证的数据类型来判断是否支持该验证器;在 validate
方法中,我们根据需要实现验证逻辑,当发现错误时,使用 Errors
对象记录错误信息。
要对数据进行验证,我们可以使用 Validator
接口的 validate
方法。例如,以下代码中的 UserController
用于接收用户提交的数据,并调用 UserValidator
进行验证:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserValidator userValidator;
@PostMapping("/")
public ResponseEntity<?> createUser(@RequestBody User user, BindingResult result) {
userValidator.validate(user, result);
if (result.hasErrors()) {
return ResponseEntity.badRequest().body(result);
}
// save user to database...
return ResponseEntity.ok(user);
}
}
可以发现,在 createUser
方法中,我们通过 userValidator
调用了 UserValidator
中的 validate
方法来进行验证,同时将验证结果保存在 result
对象中。当发现验证错误时,我们通过 bindingResult
返回错误信息,否则将用户对象保存到数据库并返回成功信息。
通过使用 Spring Boot 验证器,我们可以很方便地对用户提交的数据进行验证,以确保数据的合法性和安全性。同时,在验证器中可以灵活地实现各种验证逻辑,以满足不同的应用需求。