scala akka-http - 使用预先构建的json对象完成get请求并将其流式传输

时间:2017-04-30 22:27:08

标签: json scala streaming akka-http

我试图通过返回预先构建的JsonArray来完成get请求,并且还找到了一种流式传输方法。我可以轻松完成请求而不会出现任何错误,如果我将JsonArray转换为字符串,则返回Json,如下所示:

get {
  path("getJsonData") {
    parameterMap {
      params =>
        complete(HttpEntity(ContentTypes.`application/json`, myJsonArray.toString))
    }
  }
}

但是,我想避免转换为字符串,并且能够流式传输JsonArray,因为在某些情况下生成的JsonArray可能非常大。

JsonArray是从头开始从单个JsonObjects创建的,我不使用case类,所以我无法使用我在文档中找到的标准方法。

我是Akka Http的新手,不确定是否有一种简单的方法可以解决这个问题,我会很感激帮助。

1 个答案:

答案 0 :(得分:1)

使用下面的内容,您将在单独的HTTP块中流式传输JSON数组的每个元素。

      complete(HttpEntity(ContentTypes.`application/json`, 
        Source(myJsonArray.elements).map(j ⇒ ByteString(j.prettyPrint))))

请注意:

  • 可以重新选择prettyPrint JSON以满足您的需求。
  • 您可以使用Akka Streams API将元素组合在一起来调整框架的大小。