我有一个端点,应该生成带有流的 CSV 报告。我像这样实现了端点:
@GetMapping(value = "/sessions/csv")
public Flux<CsvEntity> getCsv() {
return csvService.exportToCsv();
}
现在我通过流获取响应,但没有标题,并且数据与字段名称一起显示。 我尝试使用 opencsv 的
StatefulBeanToCsv
但为此我需要一个作家。当我使用 servlet 时,我可以使用 response.getOutputStream()
初始化编写器,但使用 webflux 时我无法使其工作。
我没有找到任何相关文档。有什么帮助吗?
这是一个示例控制器,如果您在浏览器中调用它,则返回 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
)来完成相同的操作