【问题标题】:How to send large json data to the spring controller如何将大型json数据发送到spring控制器
【发布时间】:2019-07-12 17:39:31
【问题描述】:

如何将大量 json 数据发送到 spring 控制器。说,我有大约 100k 或 1000k 记录的大型 json 数据,我需要在 spring 或 springboot 中发送到我的 rest 控制器,那么解决问题的最佳/最有效方法是什么。

我知道可以使用请求正文发送数据,但我认为在 REST api 的请求正文中发送如此大量的数据效率不高。我这里可能有错误,如果我错了,请纠正我。

并且数据需要尽快存储到数据库中。所以,我需要一种快速可靠的方法来解决这个问题。

【问题讨论】:

  • 我认为真正的问题与使用 rest 在 body 中的位置无关,因为它取决于您的网络延迟和吞吐量。
  • 是的,当然这取决于网络延迟和吞吐量,但必须有一些更有效的方法来做这些事情。在请求正文中发送大量数据(~200-300mb)对我来说似乎并不好
  • 那么,我想你正在寻找像分页休息这样的机制,检查这个developer.github.com/v3/guides/traversing-with-pagination
  • 那篇文章是关于接收分页 json 响应的。我已经多次使用分页来接受响应。但这里的问题在于将有效负载发送到控制器。无论如何,感谢您的宝贵时间
  • 你是对的,让我尝试建议,你可以发送替代类型的请求,如文件多部分,性能方面应该更有效。

标签: java spring rest spring-boot


【解决方案1】:

您的问题有两个部分。
1.如何接收如此庞大的数据量:如果接收到大量数据,通常最好将其(从响应的输入流中)保存为本地文件并异步处理该数据。(使确保您设置了适当高的读取超时,否则数据流可能会被中断)。
2.你如何处理这么大的文件:对于大文件,内存占用需要最小。对于 XML,SaxParsers 是一个黄金标准。我发现这个库与 sax 解析非常相似,但是对于 Json http://rapidjson.org/md_doc_sax.html

【讨论】:

    【解决方案2】:

    您可以使用反应式方法并流式传输数据。 对于 Spring,使用 MediaType.APPLICATION_STREAM_JSON_VALUE producer 和 Flux 作为返回类型。 在客户端,订阅流并处理数据,也可以使用 Spring Batch 将数据保存到数据库中。

    【讨论】:

      猜你喜欢
      • 2018-01-18
      • 1970-01-01
      • 2018-02-15
      • 2016-09-21
      • 2012-09-09
      • 2018-11-26
      • 2013-01-11
      • 2020-05-06
      相关资源
      最近更新 更多