如何将动作的主体作为字符串

时间:2013-04-23 08:24:19

标签: scala playframework-2.1

我有两个动作。第一个服务于单个资产,第二个服务应将所有单个资产合并为一个资产。因此,我的想法是调用第一个为第二个操作提供单个资产的操作,该操作为组合资产提供服务。有些人会说这是一个坏主意,因为我可以直接从文件系统加载资产并将它们组合起来。但这是不可能的,因为第一个动作与其他动作相关联,以对资产进行一些额外的操作(指纹识别,......)。

以下是我的行动:

第一个服务于单个资产。在此实现中,它仅调用链中的下一个操作。

abstract override def at(path: String, file: String): Action[AnyContent] = {
  super.at(path, file)
}

第二个接受文件列表为JSON。然后它遍历列表并使用单个文件调用第一个操作。

def consolidate = Action(parse.json) { request =>
  val files = request.body.as[List[String]]
  for (file <- files) {
    val action = at(path, new URL(file).getPath.substring(1))
    val result = action.apply(request)
  }
  Ok()
}

现在我的问题是,如何将资产作为字符串?变量结果包含Iteratee[Array[Byte], Result]。如何从中提取资产数据?

play.api.test.Helper 对象包含 contentAsString contentAsBytes 方法。但这对我没有帮助!

1 个答案:

答案 0 :(得分:0)

Iteratee表示操作的消费者方。返回Iteratee的方法没有文档,但我猜测它将用于在请求期间使用来自客户端的输入数据流。所以,简而言之,它对你没有帮助。

您可以从第一个操作中获取代码,即需要在consolidate中调用的代码并将其分解为某个方法,并在两个操作中使用该方法。这对你来说可行吗?