数据校验-validation-中@NotNull groups 详细用法以及示例
在 Java Bean Validation 中(JSR 380),约束注解(例如 @NotNull)可以通过 groups 属性归类到不同的验证组中,从而在不同的业务场景下选择性地执行验证。这种机制非常适合于“创建”与“更新”操作中字段要求不同的情况。
基本概念
-
默认组
如果没有指定 groups 属性,所有约束默认属于javax.validation.groups.Default
组。 -
自定义组
你可以定义一个或多个接口来表示不同的验证组,例如CreateGroup
、UpdateGroup
等。 -
验证时指定组
在调用验证器或使用 Spring 的@Validated
时,可以指定需要验证的组,只有属于该组的约束才会被检查。
示例
假设我们有一个用户实体,创建用户时要求 username 和 password 均不能为空,而更新时只要求 username 不能为空,可以这样实现:
1. 定义验证组接口
public interface CreateGroup {
}
public interface UpdateGroup {
}
2. 定义实体类
import javax.validation.constraints.NotNull;
public class User {
@NotNull(message = "用户名不能为空", groups = {CreateGroup.class, UpdateGroup.class})
private String username;
@NotNull(message = "密码不能为空", groups = CreateGroup.class)
private String password;
// 省略 getter 和 setter
}
在这个示例中:
-
username
字段在创建和更新时均不能为空。 -
password
字段仅在创建时不能为空。
3. 在 Spring Controller 中使用
在 Spring Boot 中,可以通过 @Validated
注解指定验证组:
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
public class UserController {
// 创建用户时验证 CreateGroup 组的约束
@PostMapping("/create")
public String createUser(@RequestBody @Validated(CreateGroup.class) User user) {
// 业务逻辑
return "用户创建成功";
}
// 更新用户时验证 UpdateGroup 组的约束
@PutMapping("/update")
public String updateUser(@RequestBody @Validated(UpdateGroup.class) User user) {
// 业务逻辑
return "用户更新成功";
}
}
在创建用户的接口中,只有 CreateGroup
组的约束会被检查;在更新用户的接口中,只检查 UpdateGroup
组的约束。
小结
-
定义验证组:创建接口(例如
CreateGroup
、UpdateGroup
)。 -
注解分组:在约束注解的 groups 属性中指定需要生效的组。
-
分场景验证:在验证时通过指定组,只验证目标场景需要的约束。
上一篇: 几秒钟就充满电!科学
下一篇: 暂无数据