四、@Validated校验之分组策略

2023-03-28 12:58:24

前言

之前的案例在使用@Validated进行校验时,校验条件绑定了Java Bean。在实际应用中,一个类可能有几十个字段,针对不同的接口可能需要验证的约束也不同。

比如Person类,PersonId为主键,根据主键查询接口,PersonId不能为空。新增接口时,无需PersonId,而只是对姓名和性别进行非空判断,此时就会出现问题。

为了解决上述问题,@Validated支持分组策略,每个校验注解可以划分为一个或多个分组,通过分组配置满足不同接口同一校验Bean的需求。

案例

  1. 创建分组,分组是一个接口(接口中无方法),同时可以继承其他的组,这里创建一个Selcet和一个Insert,表示查询和新增分组。
public interface Select {
}
public interface Insert {
}
  1. 创建Person类,添加校验注解及指定分组
@Data
public class Person {
    @NotNull(message = "personId不能为null",groups = Select.class)
    private Integer personId;
    @NotEmpty(message = "name不能为空",groups = Insert.class)
    private String name;
    private Integer age;
}
  1. 创建查询和新增接口,添加@Validated注解,指定分组,可多个。
    @GetMapping("/select")
    public Object select(@Validated({Select.class}) Person person) {
        return person;
    }

    @GetMapping("/insert")
    public Object insert(@Validated(Insert.class) Person person) {
        return person;
    }
  1. 访问查询接口,http://localhost:8000/test/select,发现只对personId进行了校验,分组生效
    在这里插入图片描述

  2. 访问查询接口,http://localhost:8000/test/insert?name=111,发现只对name进行了校验,personId校验未开启,分组生效
    在这里插入图片描述

  • 作者:云烟成雨TD
  • 原文链接:https://yunyanchengyu.blog.csdn.net/article/details/117221841
    更新时间:2023-03-28 12:58:24