【发布时间】:2016-05-24 12:00:33
【问题描述】:
我正在使用 Play 2.5 和 Scala 2.11。我正在尝试将 async Action 与 Future 一起使用以返回 json 字符串,但无法使其正常工作。 这是我的行动:
def getData = Action.async { implicit request =>
val futureData = Future { daoObj.fetchData }
futureData onComplete {
case Success(data) =>
Ok(Json.prettyPrint(Json.obj("data" -> data.groupBy(_.name))))
case Failure(t) =>
BadRequest(Json.prettyPrint(Json.obj(
"status" -> "400",
"message" -> s"$t"
)))
}
}
daoObj.fetchData 返回 scala.concurrent.Future[List[models.Data]]
这是模型。数据:
case class Data(name: String, details: String)
我可以有这样的数据
Data (name = "data1", details = "details1")
Data (name = "data1", details = "details1a")
Data (name = "data2", details = "details2")
我可以加入名称以返回表单的结构
Map(data1 -> List("details1", "details11"),
data2 -> List("details2"))
我在 groupBy 上有一个编译错误:
value groupBy is not a member of scala.concurrent.Future[List[models.Data]]
1) 如何在我的操作中从 Future 获取值 (List[models.Data]) ?
2) 这是我的第一个 Play Scala 应用程序,所以如果您有任何意见可以改进我的代码,欢迎提出。
【问题讨论】:
-
看起来您在
daoObj.fetchData周围多了一个Future{}。删除它。
标签: scala asynchronous playframework