使用 Spring 反应式 webflux 生成 CSV

问题描述 投票:0回答:1

我有一个端点,应该生成带有流的 CSV 报告。我像这样实现了端点:

     @GetMapping(value = "/sessions/csv")
      public Flux<CsvEntity> getCsv() {
        return csvService.exportToCsv();
  }

现在我通过流获取响应,但没有标题,并且数据与字段名称一起显示。 我尝试使用 opencsv 的

StatefulBeanToCsv
但为此我需要一个作家。当我使用 servlet 时,我可以使用
response.getOutputStream()
初始化编写器,但使用 webflux 时我无法使其工作。

我没有找到任何相关文档。有什么帮助吗?

csv spring-webflux opencsv spring-reactive
1个回答
0
投票

这是一个示例控制器,如果您在浏览器中调用它,则返回 CSV 文件(直接下载);如果在 Postman 中调用,则返回 CSV 数据

Spring boot + SpringWebFlux

    @GetMapping(value = "/download-csv")
    public Mono<ResponseEntity<Flux<DataBuffer>>> downloadCsvFlux() {
        String content = "Name,Age\nJohn,20\nJane,20";

        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.parseMediaType("text/csv"));
        httpHeaders.setContentDispositionFormData("attachment", "sample.csv");


        Flux<DataBuffer> csvDataBuffer = Flux.just(content.getBytes())
                .map(DefaultDataBufferFactory.sharedInstance::wrap);

        return Mono.just(ResponseEntity.ok()
                .headers(httpHeaders)
                .body(csvDataBuffer));


    }

注意:CSV 是手动生成的,但也可以使用一些库(如

opencsv

)来完成相同的操作
© www.soinside.com 2019 - 2024. All rights reserved.