当前位置: 首页 > 知识库问答 >
问题:

如何使用Reactor处理来自API的大型JSON响应?

干高歌
2023-03-14

API响应一个JSON对象,该对象具有一个对象数组,如{"项目":[{...},{...},...],...,其中包含我们需要处理的数据。问题是数组有1.000个对象,endpoint响应很慢,所以流式传输需要几秒钟才能完成,而我们的“博客”编程模型使用Apache HttpClient来消耗endpoint,杰克逊来序列化响应,我们等待为了获得完整的正文来解析保存数组的所有对象,而不是在每个元素到来时处理它们,节省了内存使用的时间,因为一旦处理了一个元素,我们可以让GC释放该元素使用的内存。

当数据到来时,我如何使用Reactor项目的响应?更改我们正在使用的HTTP客户端和/或序列化程序没有问题。此外,我们使用Java8与Spring MVC与Spring 4.3,但我们可以移动项目到即将发布的Spring。

注意:endpoint是一个第三方API,一个HTTP 1.1服务器的简单GET,我们不能改变它的工作方式,比如添加分页或类似的东西。

共有1个答案

危彬彬
2023-03-14

这个用例在即将推出的SpringWebrehtml" target="_blank">activeFramework上得到支持,SpringWebreactiveFramework目前在SpringFramework 5.0m3中提供,并通过start提供。Spring选择Spring Boot 2.0 Web响应依赖项时的io。

当您使用Flux输入参数或返回值时,处理的每个步骤都是异步和非阻塞的,Jackson用于序列化每个单独的元素,以便允许您序列化/反序列化大型且可能有限的元素流。在这种情况下,Spring将负责识别数组中的单个JSON元素以进行反序列化,或者添加JSON数组的[]以进行序列化。这还允许使用像Twiter JSON API这样的JSON流。

请注意,一旦Jackson将支持异步非阻塞处理,我们将更新Spring Framework 5编解码器以本机使用该编解码器。

 类似资料:
  • 问题内容: 我的网络服务返回一个JSON对象,如下所示 即,当我将此地址放入chrome浏览器中时,我可以到达上面。 我正在尝试在浏览器中阅读此内容,以便可以创建一个下拉选项…但是从以下代码开始我一无所获: 我总是在警报框中。我用fiddler2再次检查了Web服务请求/响应是否正常,我什至可以拦截Web服务和浏览器之间的json对象。 我也试过 我又得到了空。 我已经看过Ajax要求的json响

  • 在我们的spring boot应用程序中,我们出于某种目的调用外部API,它将返回大约20mb的JSON数据作为响应。收到响应后,使用ObjectMapper将响应映射到POJO。 我们正在使用RestTemboard调用API并接收响应。 在Spring启动应用程序中处理大型响应数据而不会出现内存问题的最佳实践是什么? 谢谢

  • 问题内容: 我正在尝试使用正则表达式搜索网页,但出现以下错误: TypeError:无法在类似字节的对象上使用字符串模式 我知道为什么urllib.request.urlopen()返回一个字节流,因此,至少在我看来,re不知道要使用的编码。在这种情况下我该怎么办?有没有办法在urlrequest中指定编码方法,或者我需要自己重新编码字符串?如果是这样,我想做什么,我假设我应该从标题信息中读取编码

  • 我在IOS应用程序中使用PromiseKit与Rails RESTful后端通信,并且有一些调用只返回头,例如通过在后端执行。 我尝试的是: 我使用了将数据发布到后端,后端确实收到了数据并响应了消息,但PromiseKit报告了以下异常: 2014-07-31 11:19:39.501 HelloPOS[13223:60b]Error Domain=NSCocoaErrorDomain Code=

  • 问题内容: 我正在尝试处理较大的(可能多达200M)JSON文件。文件的结构基本上是对象数组。 因此,遵循以下原则: 每个对象都具有任意属性,不必与数组中的其他对象共享它们(例如,具有相同的属性)。 我想对数组中的每个对象进行处理,并且由于文件可能很大,因此无法将整个文件内容都包含在内存中,无法解码JSON并遍历PHP数组。 因此,理想情况下,我想读取文件,为每个对象获取足够的信息并进行处理。如果

  • 问题内容: 我正在制作一个运行ASP.NET WebService的Android应用程序。Webservice发送一个JSON对象,应用程序解析该对象并显示在屏幕上。在一种情况下,JSON对象太大,并且出现Findered Binder Transaction错误。我的解决方案是获取该JSON对象并将其嵌入到应用程序代码中,这样就无需从服务器获取该JSON对象。你能告诉我我可以做的其他事情吗?还