【问题标题】:Reading an API which is returning StreamingResponseBody as response读取返回 StreamingResponseBody 作为响应的 API
【发布时间】:2019-10-16 14:53:08
【问题描述】:

我有一个以 JSON 格式返回大量数据 (> 7 MB) 的 API。 IOS 设备正在访问此 API 并将数据存储到本地设备存储中。由于响应量很大,用户会遇到很长的延迟。

我创建了另一个具有相同数据的 API,但这次我使用 StreamingResponseBody 将输出作为流直接写入响应对象。现在响应大小减少到 2 MB。但是客户端设备(IOS/Angular)如何读取响应?因为当我从邮递员那里点击 API 时,输出是不可读的。

这是控制器代码 -

@GetMapping( value = "/materials/stream")
    public ResponseEntity<StreamingResponseBody> getMaterialsStreamed() {

        StreamingResponseBody responseBody = outputStream -> {
            try (ObjectOutputStream oos = new ObjectOutputStream(outputStream)) {
                oos.writeObject(service.getMaterials()); // service.getMaterials() is returning Iterable<Material>
            }
        };

        return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=generic_file_name.json")
                .contentType(MediaType.APPLICATION_OCTET_STREAM).body(responseBody);
    }

【问题讨论】:

    标签: java ios angularjs spring-boot streaming


    【解决方案1】:

    您正在返回一个字节流,邮递员只会将其打印为字节(这是不可读的)。您需要先保存流,然后将其作为普通文件读取(即下载文件并使用 IOS/Angular 打开它)。

    【讨论】:

      猜你喜欢
      • 2018-10-11
      • 2019-03-16
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多