Параллельная проверка bean-компонентов объектов-контейнеров (например, List) - PullRequest
1 голос
/ 19 февраля 2020

Контекст: Микросервис, предоставляющий 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 может быть распараллелена с минимальными усилиями?


Несколько (очевидных) вариантов, которые у меня пока есть:

  1. Вручную запустить параллельно validator.validate(dataLine) из списка вместе с проверкой DataPayload без dataLines validator.validate(withoutDataLines(dataPayload)).
  2. Аналогично 1-му варианту, но с некоторыми хитростями в группах проверки.
  3. (Не уверен, если это возможно). Пользовательский ConstraintValidator, который запускает проверку для контейнерных объектов параллельно. Открытый вопрос - как делегировать вложенную / каскадную проверку механизму по умолчанию?

Несмотря на то, что варианты жизнеспособны, мне интересно, есть ли более умный и элегантный способ решения этой проблемы ..

...