簡體   English   中英

如何編寫列表<Number>使用 OpenCSV?

[英]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]

雖然我的實現只返回這個:

"8.24637830863774"

所以當我打開我的 CSV 時,我發現列“bbox”有一個值,但我也需要其他值。你能告訴我為什么它在第一個值上停止或如何獲得其他值 3?

更新:我發現這可以解決問題! 但是然后......它只為每個 StacItem 導出這個單個字段,所以我丟失了我的對象中的所有其他字段。

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

謝謝

嘗試在要映射的每個字段上使用CsvBindByName (指定注釋的column屬性不是必需的)。

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

你試過改變嗎?

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

或者

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

    // to

    beanToCSV.write(items);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM