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