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);
}
posted @ 2026-01-15 16:39  lyfa  阅读(0)  评论(0)    收藏  举报