如何用 OpenCSV 写 List<Number>?

How to write List<Number> with OpenCSV?

我在 StacItem 对象中有以下字段:

@JsonProperty
private List<Number> bbox = null;

我用 OpenCSV 做了一个基本实现,将这个对象写入 CSV,它主要适用于这段代码(我只展示了相关部分):

final StatefulBeanToCsv<Object> beanToCSV = new StatefulBeanToCsvBuilder<>(writer)
                .withSeparator(';')
                .build();
        for(StacItem item : items){
            beanToCSV.write(item);
        }
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.set(HttpHeaders.CONTENT_TYPE, "text/csv");
        httpHeaders.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=exportItems.csv");
        logger.info("END WRITING");
        return new ResponseEntity<>(new FileSystemResource(file), HttpStatus.OK);

转折点来了!在我的微服务日志中,我看到了 StacItem 的完整结构,它应该有这个 bbox 字段:

bbox=[8.24275148213394, 45.5050129344147, 7.62767704092889, 45.0691351737573]

虽然我的实现 returns 只是这样:

"8.24637830863774"

因此,当我打开我的 CSV 文件时,我只找到了具有一个值的“bbox”列,但我也需要其他值..你能告诉我为什么它停在第一个或如何获得其他 3 个值吗?

更新: 我发现这很管用!但是然后......它只为每个 StacItem 导出这个单一字段,所以我丢失了对象中的所有其他字段。

@CsvBindAndSplitByName(elementType = Number.class, writeDelimiter = ",")
    @JsonProperty("bbox")
    private List<Number> bbox = null;

谢谢

你试过改变吗?

 beanToCSV.write(item); -> beanToCSV.writeNext(item);

    for(StacItem item : items){
        beanToCSV.write(item);
    }

    // to

    beanToCSV.write(items);

尝试在每个要映射的字段上使用 CsvBindByName(指定注释的 column 属性不是必需的)。

如果您愿意,甚至可以使用 CsvBindByPosition