问题
Simple class Person.class
class Person {
@NotNull(groups = {PartlyCheck.class})
private String name;
@NotNull(groups = {FullCheck.class})
private String adress;
private boolean isFullCheck;
}
Check interfaces
public interface PartlyCheck{}
public interface FullCheck extends PartlyCheck{}
I use two approach:
if(person.isFullCheck) {
validator.validate(person, FullCheck.class);
else {
validator.validate(person, PartlyCheck.class);
}
1.
If isFullCheck=true used both checks (FullCheck.class and PartlyCheck.class)
If isFullCheck=false used only PartlyCheck.class.
It is an understandable behavior.
@GroupSequenceProvider(PersonGroupSequenceProvider.class)
@Override
public List<Class<?>> getValidationGroups(Person person) {
List<Class<?>> defaultGroupSequence = new ArrayList<>();
defaultGroupSequence.add(Person.class);
if (person.isFullCheck) {
defaultGroupSequence.add(FullCheck.class);
} else {
defaultGroupSequence.add(PartlyCheck.class);
}
return defaultGroupSequence;
}
In the second case, I added @GroupSequenceProvider(PersonGroupSequenceProvider.class).
If isFullCheck=true used only FullCheck.class.
Why extends is not considered for this case?
If isFullCheck=false used only PartlyCheck.class.
来源:https://stackoverflow.com/questions/21363481/groupsequenceprovider-and-group-is-a-superset