Взгляните на StreamingResponseBody
Тип возвращаемого значения метода контроллера для асинхронной обработки запроса, когда приложение может записывать непосредственно в ответ OutputStream, не задерживая поток контейнера сервлета. ,
(также обратите внимание на Note , упомянутый в javado c!)
Например, если вы хотите загрузить CSV с именем "example.csv":
@GetMapping("/downloadCsv")
public ResponseEntity<StreamingResponseBody> downloadCsv() {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType("text/csv");
httpHeaders.setContentDisposition(ContentDisposition.builder("attachment").filename("example.csv").build());
return () ->
new ResponseEntity<>(
outputStream -> downloadService.downloadCsv("example.csv" outputStream),
httpHeaders,
HttpStatus.OK);
}
Поскольку вы не сообщили нам, какой пользовательский интерфейс вы используете, я сосредоточился на серверной части.