После этого у меня есть небольшая служба весенней загрузки, которая подключается к внешнему хранилищу (Google Cloud Platform) для извлечения файла в виде потока (ReaderChannel) и создания ответа в виде потока с ResponseEntity для клиента.
Цель: низкое использование памяти. Для ответа я использую asyn c способ получения из Google Cloud Platform и отправки его эмитенту. Если соединение потеряно или внутреннее время ожидания истекло, то клиенты получают неполный файл, но без ошибок.
Как передать клиенту некоторую информацию об ошибке / сигнале / состоянии, если я уже отправил HTTP-статус до того, как отправил полезную нагрузку ответа?
С наилучшими пожеланиями за вашу помощь.
Свен
@GetMapping("/file/{reportFileId}")
public ResponseEntity<ResponseBodyEmitter> streamReportFileContent(@PathVariable String reportId) {
ResponseBodyEmitter emitter = new ResponseBodyEmitter();
nonBlockingService.execute(() -> {
try {
taskManager.downloadFile(reportId, bytes -> {
try {
emitter.send(bytes);
} catch (Exception e) {
emitter.completeWithError(e);
}
});
emitter.complete();
} catch (Exception e) {
emitter.completeWithError(e);
}
});
return new ResponseEntity<>(emitter, HttpStatus.OK);
}