首页 > 解决方案 > 使用 Univocity 将 bean 注释到部分记录

问题描述

我想让 Univocity 使用带注释的 bean实例来确定 CSV 内容的一部分,即仅前几列。其余列由一些复杂的编程逻辑提供,独立于 bean 实例或类型。

我知道 Univocity 可以将带注释的 bean 转换为记录,但是我找不到如何使用 Univocity 处理带注释的 bean 以获得部分记录,而我在不使用带注释的 bean 的情况下以编程方式确定记录的其余部分。

bean 将使用@Headers 和@Parsed 注释进行注释。(带注释的 bean 将由我的库的用户提供。)

我想实现与以下功能等效的东西。

public void toCsv(Map<UserBean, MyContent> entries) {
    CsvWriter writer = …
    List<String> beanHeaders = someUnivocityHelper.getAsHeaders(UserBean.class);
    List<String> allHeaders = ImmutableList.builder().addAll(beanHeaders).addAll(myHeaders).build();
    writer.writeHeaders(allHeaders);
    for (Entry<UserBean, MyContent> entry : entries.entrySet()) {
        UserBean userBean = entry.getKey();
        Map<String, Object> beanAsMap = someUnivocityHelper.getAsMap(userBean);
        beanAsMap.entrySet().stream().forEach(e -> writer.addValue(e.getKey(), e.getValue()));
        MyContent content = entry.getValue();
        // Here I use content and the writer to write the rest of the record
        …
        writer.writeValuesToRow();
    }
}

如何使用单义性从 bean 类中检索标头和 bean 实例中的解析值?

标签: javajavabeansunivocity

解决方案


要读取仅在 bean 中定义的标头,您可能可以尝试@Headers(extract=true),因此库将使用来自用户 bean 的注释。之后如果您想编写更多标题 - 只需将所有必需的标题设置为 csv writer: CsvWriterSettings.setHeaders(allHeaders)

也看看com.univocity.parsers.annotations.helpers.AnnotationHelper公共课。


推荐阅读