0

我正在创建一个 bean 处理器并将 setStrictHeaderValidationEnabled 设置为 true。现在我的 CsvParserSettings 正在使用这个 bean 处理器,而后者又被 CSVRoutines 使用。但是在遍历 csvroutines 时,bean 处理器不会验证标题,并且后续行也会转换为具有无效标题的文件的 bean

示例代码-

        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 注解来设置列名。

4

1 回答 1

0

iterate方法返回 a 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();
        }
    }

希望能帮助到你

于 2018-06-09T13:19:05.427 回答