Я решаю эту проблему следующим образом:
private <T> void validateFormData(T formData, Class<T> clazz, LoanApplicationIo loanApplication) {
List<Class> groups = Arrays.stream(clazz.getAnnotations())
.filter(annotation -> annotation instanceof GroupSequence)
.flatMap(annotation -> Arrays.stream(((GroupSequence)annotation).value()))
.filter(Class::isInterface)
.distinct()
.collect(Collectors.toList());
if (!groups.contains(Default.class)) {
groups.add(Default.class);
}
Set<ConstraintViolation<T>> violations = validator.validate(formData, groups.toArray(new Class[groups.size()]));
Я не уверен, что это правильный путь, но он работает.