📜  springboot 验证器手动验证 (1)

📅  最后修改于: 2023-12-03 15:20:13.796000             🧑  作者: Mango

Spring Boot 验证器手动验证

在 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 验证器,我们可以很方便地对用户提交的数据进行验证,以确保数据的合法性和安全性。同时,在验证器中可以灵活地实现各种验证逻辑,以满足不同的应用需求。