分组校验
在 Spring Boot 中,Hibernate Validator 是处理数据校验的核心框架。它允许我们针对不同的业务场景定义校验规则,并通过分组机制灵活控制校验范围。
引入依赖
首先需要在项目中添加验证启动器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
定义分组接口
我们可以创建标记接口来区分不同场景的校验逻辑,例如创建和更新操作:
public interface CreateGroup { }
public interface UpdateGroup { }
指定校验分组
在实体类字段上应用注解时,通过 groups 属性绑定到特定分组。未指定分组的默认属于 Default 组,且分组支持继承。
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
public class User {
@NotBlank(message = "姓名不能为空", groups = {UpdateGroup.class})
private String name;
@NotBlank(message = "用户名不能为空", groups = {CreateGroup.class, UpdateGroup.class})
@Size(min = 5, max = 20, message = "用户名长度必须在 5-20 个字符之间", groups = {CreateGroup.class, UpdateGroup.class})
private String username;
// getter 和 setter 方法省略...
}
控制器中执行校验
在 Controller 层,使用 @Validated 指定需要触发的分组,配合 BindingResult 捕获错误信息。
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
org.springframework.web.bind.annotation.RequestBody;
org.springframework.web.bind.annotation.RestController;
javax.validation.Valid;
{
String {
(bindingResult.hasErrors()) {
bindingResult.getFieldError().getDefaultMessage();
}
;
}
String {
(bindingResult.hasErrors()) {
bindingResult.getFieldError().getDefaultMessage();
}
;
}
}









例如:




