【发布时间】:2017-12-07 19:09:17
【问题描述】:
假设我有一个使用这种方法的播放控制器 -
def persons(): Action[AnyContent] =
Action { _ =>
Ok.chunked(personSource.map { p => JsObject(p) }
)
}
Akka Source 流是一个庞大但有限的 Persons 流,比如我们的 db。一次将所有内容加载到内存中会导致内存不足异常。
上面的代码运行良好,我得到了一个很长的 json 对象流:
{"name": "TestPerson1}{"name": "TestPerson2"}
但现在客户要求响应格式如下:
[{"name": "TestPerson1},{"name": "TestPerson2"}]
我在寻找如何向流中发出前缀/后缀时遇到了麻烦。也许是过滤器或嵌套动作?但是我发现的示例倾向于对请求进行操作,例如重定向,或者在将处理移交给内部 Action 之前进行一些副作用操作,例如记录某些内容。
我想在 http 响应的开头发出“[”,在中间保持 Source 异步分块处理,然后在最后发出“]”。
【问题讨论】:
-
您可以轻松连接块的来源
-
@cchantep 啊,对了,如果我将 Person 源映射到 Source[String],然后使用 Source.concat(next),我可以在流源级别上做到这一点。谢谢,如果我让它工作,我会发布一个完整的解决方案。
标签: json scala playframework streaming akka