springBoot validation分组校验
应用场景
对于一个DTO类,可能即会用于更新也会用于新增,但是新增和更新的参数校验是不一样的。例如对于一个自增主键ID字段,对于新增这个ID必须为空的,但是对于更新这个字段就必须不能为空。
如果新增和更新分别定义一个DTO,那会有很多重复的代码,以及增加类的数量。这时候就可以使用Validate的分组校验,在一个DTO上分成更新组和新增组分别进行不同的校验。
简单使用
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>${spring-boot.version}</version>
</dependency>
定义分组
- 定义空的接口类用于分组
- 接口继承Default类 会对没有指定分组的进行校验
- 例如下面代码中StudentDTO代码中 name字段虽然没有指定分组,但是由于新增分组和更新分组都继承了Default类,所以也会被校验
public interface NewGroup extends Default {
}
public interface UpdateGroup extends Default {
}
定义DTO类
- 在对应的校验上指定分组
@Data
public class StudentDTO {
// 指定分组
@NotNull(groups = UpdateGroup.class)
@Null(groups = NewGroup.class)
private Integer id;
@NotBlank
private String name;
@Min(groups = NewGroup.class, value =1)
@Max(groups = NewGroup.class, value =150)
private Integer age;
@NotBlank
private String sex;
private String address;
private Double height;
private Double weight;
private Date birth;
}
在接口中指定分组
@PutMapping
public void updateStudent(@RequestBody @Validated(UpdateGroup.class) StudentDTO student){
studentService.updateStudent(student);
}

浙公网安备 33010602011771号