使用Spring reactive webflux生成CSV

omvjsjqw  于 11个月前  发布在  Spring
关注(0)|答案(1)|浏览(165)

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

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

字符串
现在我通过一个流得到响应,但是我没有头,数据是用字段名显示的。我尝试使用opencsv的StatefulBeanToCsv,但是我需要一个writer。当我使用servlet的时候,我可以用response.getOutputStream()初始化一个writer,但是用webflux我不能让它工作。
我没找到任何相关文件。有什么能帮忙的吗?

carvr3hs

carvr3hs1#

下面是一个在浏览器中返回CSV文件(可下载)的Controller示例

  • Sping 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等库来完成

相关问题