GroupSequenceProvider是一个接口,用于定义校验组的顺序。它可以根据实体类的属性值动态地改变校验组的顺序。举个例子,当用户的性别为女时,我们需要对照片字段进行非空校验,而当性别为男时则不需要进行该项校验。这时我们就可以使用GroupSequenceProvider来动态地改变校验组的顺序,从而实现不同情况下的校验需求。
下面是一个示例代码,当用户的性别为女时,对照片字段进行非空校验:
public class CustomGroupSequenceProvider implements DefaultGroupSequenceProvider { @Override public List getValidationGroups(UserVo user) { List defaultGroupSequence = new ArrayList<>(); defaultGroupSequence.add(UserVo.class); if (user != null) { String sex = user.getSex(); if ("女".equals(sex)) { defaultGroupSequence.add(Girl.class); } } return defaultGroupSequence; } } @Data @GroupSequenceProvider(CustomGroupSequenceProvider.class) public class UserVo implements Serializable { @NotBlank(message = "性别不能为空") private String sex; @NotEmpty(message = "性别为女时照片不能为空", groups = {Girl.class}) private List photoList; } public interface Girl {}
在上面的代码中,我们定义了一个CustomGroupSequenceProvider类,实现了DefaultGroupSequenceProvider接口,并重写了其中的getValidationGroups方法。在该方法中,我们首先将默认的校验组UserVo.class添加到校验组列表中,然后判断用户的性别是否为女,如果是女性,则将Girl.class校验组添加到校验组列表中。最后返回校验组列表。
在UserVo类中,我们使用@GroupSequenceProvider注解指定了CustomGroupSequenceProvider类作为校验组顺序的提供者。同时,在photoList字段上使用@NotEmpty注解,并指定了该注解的groups属性为{Girl.class},表示只有在Girl.class校验组中才会对该字段进行非空校验。