Использование метода setStrictHeaderValidationEnabled в csvRoutines не работает - PullRequest
0 голосов
/ 08 июня 2018

Я создаю бобовый процессор и устанавливаю для setStrictHeaderValidationEnabled значение true.Теперь мои CsvParserSettings потребляют этот компонент EJB, который, в свою очередь, используется CSVRoutines.Но при переборе csvroutines процессор бина не проверяет заголовки, и последующие строки также преобразуются в бины для файлов с недопустимыми заголовками

Пример кода -

        final BeanProcessor<TestBean> rowProcessor = new BeanProcessor<TestBean>(TestBean.class) {

        @Override
        public void beanProcessed(TestBean bean, ParsingContext context) {

        }
    };
    rowProcessor.setStrictHeaderValidationEnabled(true);
    final CsvParserSettings parserSettings = new CsvParserSettings();
    parserSettings.setProcessor(rowProcessor);
    parserSettings.setHeaderExtractionEnabled(true);
    parserSettings.getFormat().setDelimiter(',');
    CsvRoutines routines = new CsvRoutines(parserSettings);
    for(TestBean bean : routines.iterate(TestBean.class, inputFile, StandardCharsets.UTF_8)) {
        try {
            System.out.println(OBJECT_MAPPER.writeValueAsString(bean));
        } catch (JsonProcessingException e) {

            e.printStackTrace();
        }
    }

Примечание: TestBean использует @Parsedаннотация однозначности для установки имен столбцов.

1 Ответ

0 голосов
/ 09 июня 2018

Метод iterate возвращает IterableResult, который предоставляет вам ParsingContext, из которого можно получить заголовки, проанализированные на входе.

Попробуйте этот код:

    IterableResult<TestBean, ParsingContext> iterableResult = routines.iterate(TestBean.class, inputFile, StandardCharsets.UTF_8);
    ResultIterator<TestBean, ParsingContext> iterator = iterableResult.iterator();
    ParsingContext context = iterator.getContext();

    String[] headers = context.headers();
    //HEADERS HERE:
    System.out.println(Arrays.toString(headers));

    while(iterator.hasNext()){
        try {
            System.out.println(OBJECT_MAPPER.writeValueAsString(iterator.next()));
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

Надеюсь, это поможет

...