Как установить делегат при использовании GsonJsonObjectReader с MultiResourceItemReader - PullRequest
0 голосов
/ 17 июня 2020

Я использую весенний пакетный мультиресурс JsonItemReader для чтения нескольких файлов из места, как показано ниже:

public MultiResourceItemReader<Trade> getReader() {
   ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
   Resource[] resources = resolver.getResources("file:" + "D:/files/trade*.json");//trade1.json, trade2.json, etc
   MultiResourceItemReader<Trade> reader = new MultiResourceItemReader<>();
   reader.setResources(resources);
   reader.setDelegate(getDelegate());
   return reader;
}

private JsonItemReader<Trade> getDelegate() {
   return new JsonItemReaderBuilder<Trade>()
             .jsonObjectReader(new GsonJsonObjectReader<>(Trade.class))
             .resource(??) /* <--- what to specify here since resource is a mandatory field*/
             .name("tradeJsonItemReader")
             .build();
}

В getDelegate() есть способ установить фиктивный ресурс с учетом того, что это обязательное поле? Я устанавливаю ресурсы для MultiResourceItemReader в методе getReader(), поэтому мне не нужно этого делать.

Я не могу просто вернуть new GsonJsonObjectReader<>(Trade.class) из метода getDelegate(), поскольку MultiResourceItemReader ожидает ResourceAwareItemReaderItemStream .

Какой у меня лучший вариант для установки ресурса?

1 Ответ

0 голосов
/ 18 июня 2020

На самом деле это ошибка, и похоже, такая же проблема может произойти и с StaxEventItemReaderBuilder. Ресурс должен быть необязательным для этого варианта использования, поскольку он разрешен при использовании FlatFileItemReader в качестве делегата MultiResourceItemReader, см. здесь .

Так что я думаю, что то же самое должно быть сделано для JsonItemReaderBuilder и StaxEventItemReaderBuilder. Пожалуйста, откройте вопрос на Github и добавьте ссылку на этот вопрос SO. Спасибо заранее.

...