SpringBoot 数据基础校验_ 分组校验 【Group Validate】

SpringBoot 允许对同一个Bean进行不同条件的校验。

比如 某个情况下 这个Bean的 name 要求3-6位, 另一个情况下 name又要求 4-6位。

 

这种我们可以这样定义:

1、Bean中:

public class BeanValidationVO_Group {
    
    public static interface Group1 {};
    public static interface Group2 {};

    @Length(min=3,max=6,message = "最好长度需要在3到6位之间",groups=Group1.class)
    @Length(min=4,max=6,message = "最好长度需要在4到6位之间",groups=Group2.class)
    @Zen_Field("姓名")
    private String name;

    @Min(5)
    @Max(15)
    //该字段不设置校验的group
    private int age;

    @NotNull
    @Size(min = 1,message = "不能为空",groups={Group1.class, Group2.class})
    private List<String> list;

}

 

2、controller中进行调用:

    /**
     *  这种只会包含 没定义 groups 的校验,此处用@Valid 和 @Validated 等效
     *  结果为: "[age:最小不能小于5]"
     */
    @RequestMapping("/testPost_Group_None")
    public IBaseResult testPost_Group_None(final HttpServletRequest request, @RequestBody @Validated BeanValidationVO_Group vo) {
    }

    /**
     *  这种只会包含校验定义时指定了 Group1 的校验
     *  结果为: "[姓名:最好长度需要在3到6位之间, list:不能为空]"
     */
    @RequestMapping("/testPost_Group1")
    public IBaseResult testPost_Group1(final HttpServletRequest request, @RequestBody @Validated(BeanValidationVO_Group.Group1.class) BeanValidationVO_Group vo) {
    }

    /**
     *  这种只会包含校验定义时指定了 Group2 的校验
     *  结果为: "[list:不能为空, 姓名:最好长度需要在4到6位之间]"
     */
    @RequestMapping("/testPost_Group2")
    public IBaseResult testPost_Group2(final HttpServletRequest request, @RequestBody @Validated(BeanValidationVO_Group.Group2.class) BeanValidationVO_Group vo) {
    }

    /**
     *  这种不会包含 没定义 groups 的校验,只会包含校验定义时指定了 Group1 或者 Group2 的校验
     *  结果为: "[姓名:最好长度需要在4到6位之间, list:不能为空, 姓名:最好长度需要在3到6位之间]"
     */
    @RequestMapping("/testPost_Group_All")
    public IBaseResult testPost_Group_All(final HttpServletRequest request, @RequestBody @Validated({BeanValidationVO_Group.Group1.class,BeanValidationVO_Group.Group2.class}) BeanValidationVO_Group vo) {
    }

 

posted on 2019-11-20 17:52  HB1  阅读(5887)  评论(0)    收藏  举报

导航