首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >读取返回StreamingResponseBody作为响应的接口

读取返回StreamingResponseBody作为响应的接口
EN

Stack Overflow用户
提问于 2019-05-31 07:31:08
回答 1查看 960关注 0票数 0

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

我使用相同的数据创建了另一个应用程序接口,但这次我使用StreamingResponseBody将输出作为流直接写入响应对象。现在响应大小减少到2 MB。但是客户端设备(IOS/Angular)如何读取响应呢?因为当我点击postman的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);
    }
EN

回答 1

Stack Overflow用户

发布于 2019-05-31 08:41:40

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56386898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档