@Valid和@Validated的区别

1. @Valid 的使用

@Valid 是 Java Bean Validation 规范(JSR-303/JSR-380)中的标准注解。它用于触发对 Java Bean 的验证。你可以在类的字段上使用验证注解(如 @NotNull, @Size, @Min, @Max 等),然后使用 @Valid 来触发对这些字段的验证。

示例:

java
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.Valid;

public class User {

    @NotNull
    private String name;

    @Size(min = 18)
    private int age;

    // Getters and Setters
}

public class UserRequest {

    @Valid
    private User user;

    // Getters and Setters
}

在这个例子中,UserRequest 类中有一个 User 类型的字段 user,并使用了 @Valid 注解,这样在验证 UserRequest 对象时,Spring 会自动验证 user 字段中 User 类的约束条件。

2. @Validated 的使用

@Validated 是 Spring 提供的一个注解,它扩展了 @Valid,并增加了对分组验证的支持。分组验证允许你根据不同的验证场景,选择不同的验证规则。

分组验证的概念

通过定义验证分组,你可以在不同的情况下执行不同的验证。例如,某些字段在创建时是必填的,而在更新时则可以是可选的。

示例:

  1. 定义验证分组:
java
public interface CreateGroup {}
public interface UpdateGroup {}
  1. 在实体类中使用分组:
java
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class User {

    @NotNull(groups = CreateGroup.class)
    private String name;

    @Size(min = 18, groups = CreateGroup.class)
    private int age;

    @Size(min = 1, groups = UpdateGroup.class)
    private String nickname;

    // Getters and Setters
}
  1. 在控制器中使用 @Validated 和指定分组:
java
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@RestController
public class UserController {

    @PostMapping("/createUser")
    public String createUser(@RequestBody @Validated(CreateGroup.class) User user) {
        // 这里会进行 CreateGroup 组的验证
        return "User created!";
    }

    @PutMapping("/updateUser")
    public String updateUser(@RequestBody @Validated(UpdateGroup.class) User user) {
        // 这里会进行 UpdateGroup 组的验证
        return "User updated!";
    }
}

@Valid@Validated 的区别

  1. 基本功能:

    • @Valid 是 JSR-303/JSR-380 规范的一部分,用于触发验证。
    • @Validated 是 Spring 的扩展,除了触发验证外,还支持验证分组。
  2. 验证分组:

    • @Valid 不支持验证分组,只会按照默认的验证规则进行验证。
    • @Validated 支持验证分组,可以根据不同的验证场景选择不同的验证规则。
  3. 使用场景:

    • 如果你不需要分组验证,只需进行普通的验证,可以使用 @Valid
    • 如果你需要根据不同的业务场景执行不同的验证逻辑,则可以使用 @Validated 配合分组。

总结:

  • @Valid:标准的 Bean Validation 注解,适用于一般的验证场景。
  • @Validated:Spring 提供的扩展,支持验证分组,适用于需要分组验证的场景。

在大多数简单的应用中,@Valid 足以满足需求。但是如果你需要根据不同的请求场景(如创建和更新)进行不同的验证,@Validated 将更加灵活。

posted @ 2024-11-12 17:32  七彩鱼丸  阅读(21)  评论(0编辑  收藏  举报