我想让Univocity使用带注释的bean实例来确定CSV内容的一部分,即前几列。其余的列由一些复杂的编程逻辑提供,这些逻辑独立于bean实例或类型。
我理解Univocity可以将带注释的bean转换为记录,但我无法找到如何使用Univocity处理带注释的bean以获得部分记录,而我可以编程地确定记录的其余部分,而无需使用注释bean。
bean将使用@Header和@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类检索标头,以及如何使用univocity从bean实例中检索解析的值?
发布于 2020-06-12 03:59:15
要读取仅在bean中定义的头文件,您可能可以尝试使用@Headers(extract=true),因此库将使用来自用户bean的注释。如果您想要编写更多的头,只需将所有必需的头设置为csv编写器:CsvWriterSettings.setHeaders(allHeaders)即可。
还可以查看com.univocity.parsers.annotations.helpers.AnnotationHelper公共类。
https://stackoverflow.com/questions/62229536
复制相似问题