Spring boot 2, как сигнализировать клиентам об ошибке при длительных ответах - PullRequest
0 голосов
/ 26 марта 2020

После этого у меня есть небольшая служба весенней загрузки, которая подключается к внешнему хранилищу (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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...