API 响应一个 JSON 对象,它有一个对象数组,比如 {"items":[{...},{...},...], ...
我们需要处理的数据。问题是数组有 + 1.000 个对象,端点响应很慢,所以流式传输需要很多秒才能完成,而我们使用 Apache HttpClient 的“bloking”编程模型 消耗端点和 Jackson 序列化响应,我们等待获取完整主体来解析包含数组的所有对象,而不是在每个元素到来时处理它,节省时间内存使用,因为一旦处理了一个元素,我们就可以让 GC 释放该元素使用的内存。
当数据到来时,我如何使用 Reactor 项目 响应?更改我们正在使用的 HTTP 客户端和/或序列化程序没有问题。此外,我们将 Java 8 与 Spring MVC 和 Spring 4.3 一起使用,但我们可以将该项目移至即将发布的 Spring 版本。
注意:端点是一个第三方 API,一个简单的 GET 到 HTTP 1.1 服务器,我们不能改变它的工作方式,比如添加分页或类似的东西。
最佳答案
即将推出的 Spring Web Reactive 框架支持此用例,目前在 Spring Framework 5.0 M3 中可用并在选择 Spring Boot 2.0 + Web Reactive 依赖项时通过 start.spring.io。
当您使用 Flux 时输入参数或返回值,处理的每一步都是异步和非阻塞的,Jackson 用于序列化每个单独的元素,以允许您序列化/反序列化大的和可能有限的元素流。在这种情况下,Spring 将负责识别数组中的单个 JSON 元素以进行反序列化或添加 [
、、
和 ]
用于序列化的 JSON 数组。这也允许使用 JSON 流,例如 Twitter JSON API。
请注意,一旦 Jackson 支持异步非阻塞处理,我们将更新 Spring Framework 5 编解码器以在本地使用它。
关于java - 如何使用 Reactor 处理来自 API 的大型 JSON 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40594174/