Я использую Play 2.5 и Scala 2.11. Я пытаюсь использовать async Action with Future для возврата строки json, но не могу заставить ее работать. Вот мои действия:Async Action and Future
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 [Список [models.Data]]
Вот models.Data:
case class Data(name: String, details: String)
I может иметь такие данные
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) Как получить значение (List [models.Data]) из будущего в своем действии?
2) Это мое первое приложение Play Scala, поэтому, если у вас есть какие-либо комментарии для улучшения моего кода, это приветствуется.
Похоже, у вас есть дополнительная 'Future {}' around 'daoObj.fetchData'. Убери это. – Dima