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) { }