返回

Spring Boot:使用 @Validated 注解进行请求参数校验

后端

用 @Validated 在 Spring Boot 中轻松校验请求参数

简介

在 Spring Boot 中,校验请求参数至关重要,可以防止无效数据进入你的应用程序并导致问题。使用 @Validated 注解,你可以轻松对请求参数进行校验,确保它们符合预期的格式和约束条件。

使用 @Validated 注解校验请求参数

基本用法

@PostMapping("/users")
public User createUser(@Validated @RequestBody User user) {
    return userService.createUser(user);
}

在这里,@Validated 注解应用于控制器方法 createUser() 的请求参数 user 上。这表明框架会在处理请求之前校验 user 对象,以确保其符合预期的约束。

校验组

你可以使用校验组来控制要执行哪些校验规则。只需创建一个接口,定义要执行的规则,并将其作为 @Validated 注解的参数:

public interface UserCreateGroup {
}

@PostMapping("/users")
public User createUser(@Validated(UserCreateGroup.class) @RequestBody User user) {
    return userService.createUser(user);
}

这将只执行 UserCreateGroup 校验组中定义的规则。

手动校验请求参数

除了使用 @Validated 注解,你还可以手动校验请求参数:

@PostMapping("/users")
public User createUser(@RequestBody User user) {
    if (user.getName() == null || user.getName().isEmpty()) {
        throw new IllegalArgumentException("Name is required");
    }

    if (user.getEmail() == null || user.getEmail().isEmpty()) {
        throw new IllegalArgumentException("Email is required");
    }

    return userService.createUser(user);
}

自定义校验器

对于特定需求,你可以创建自己的自定义校验器:

public class CustomEmailValidator implements ConstraintValidator<Email, String> {

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return value != null && value.matches("[^@]+@[^@]+\\..+");
    }
}

然后,将其应用于字段:

@Email
private String email;

结论

使用 @Validated 注解、手动校验或自定义校验器,你可以确保你的请求参数符合要求,提高应用程序的健壮性。

常见问题解答

  1. 为什么使用 @Validated 注解?
    为了确保请求参数符合预期的约束条件,防止无效数据进入应用程序。

  2. 如何控制校验规则?
    使用校验组或手动校验。

  3. 如何创建自定义校验器?
    实现 ConstraintValidator 接口,并定义 isValid() 方法。

  4. 校验失败后会发生什么?
    通常会抛出 MethodArgumentNotValidException 异常。

  5. 校验请求参数有什么好处?
    确保数据的完整性和一致性,减少应用程序错误。