Контекст: Микросервис, предоставляющий REST API и обрабатывающий запросы ввода в формате JSON последовательно . Обработанный запрос десериализуется, проверяется и помещается в Kafka topi c для дальнейшей обработки.
Данный пример класса для проверки:
// autogenerated from openapi schema using custom templates
public class DataPayload {
@NotNull
@Size(min=1, max=100)
private String description;
@Valid
@Size(max=1024)
private List<DataLine> dataLines;
// getters, setters, etc.
public static class DataLine {
// lots of fields to be validated..
}
}
Мы запускаем проверку использование проверки bean-компонентов jsr303 / jsr380 :
public static void main(String[] args) {
var validator = Validation.buildDefaultValidatorFactory().getValidator();
var violations = validator.validate(getDataPayload());
}
Кто-нибудь знает, как проверка из List<DataLine> dataLines
может быть распараллелена с минимальными усилиями?
Несколько (очевидных) вариантов, которые у меня пока есть:
- Вручную запустить параллельно
validator.validate(dataLine)
из списка вместе с проверкой DataPayload без dataLines validator.validate(withoutDataLines(dataPayload))
. - Аналогично 1-му варианту, но с некоторыми хитростями в группах проверки.
- (Не уверен, если это возможно). Пользовательский
ConstraintValidator
, который запускает проверку для контейнерных объектов параллельно. Открытый вопрос - как делегировать вложенную / каскадную проверку механизму по умолчанию?
Несмотря на то, что варианты жизнеспособны, мне интересно, есть ли более умный и элегантный способ решения этой проблемы ..