GroupSequenceProvider 注解

GroupSequenceProvider 注解

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校验组中才会对该字段进行非空校验。



关键词 :  GroupSequenceProvider