【发布时间】:2017-10-03 18:27:47
【问题描述】:
我正在尝试从几个表中进行选择并将它们的结果放入一个对象中。我想这样做是因为这些是字典,我希望在启动时全部使用它们。
这就是我现在拥有的:
控制器:
def getDictionaries = Action.async { implicit request =>
Future.successful(Ok(Json.toJson(dictionaryService.getDictionaries)))
}
字典服务:
override def getDictionaries : Dictionaries = {
val currencies: Future[Seq[Currency]] = dictionaryDao.getCurrencies
val propertyTypes: Future[Seq[PropertyType]] = dictionaryDao.getPropertyTypes
Dictionaries(
currencies.result(Duration(10L, TimeUnit.SECONDS)),
propertyTypes.result(Duration(10L, TimeUnit.SECONDS))
)
}
字典DAO:
override def getCurrencies: Future[Seq[Currency]] = {
db.run(slickCurrencies.result)
}
... getPropertyTypes ...
字典案例类和伴随对象
case class Dictionaries (currencies: Seq[Currency], propertyTypes: Seq[PropertyType])
object Dictionaries {
implicit val jsonFormat = Json.format[Dictionaries]
}
我对@987654325@ 不是很自豪,但我不确定我应该从这个函数中检索什么,以便可以轻松地将其转换为 JSON。此外,这行代码仍然无法正常工作,因为编译器告诉我改用 Await 对象。
对于 PropertyType,我也需要对货币做同样的事情。
获得预期结果的最佳方法是什么?
我正处于学习阶段,所以我对此了解不多。
后期编辑:流程是:request -> getDictionaries -> dictionaryService.getDictionaries -> dictionaryDAO.getCurrencies&PropertyTypes
在我看来,我需要以同步的方式获取它们。
这样做的目的是不为每种类型的字典创建请求。如果我有 10 个字典,我想在一个请求中获取所有字典。
稍后编辑 2
这是我的工作示例,看起来不太好:
控制器:
def getDictionaries = Action.async { implicit request =>
dictionaryService.getDictionaries.map {
dictionaries => Ok(Json.toJson(dictionaries))
}
}
字典服务:
override def getDictionaries : Future[Dictionaries] = {
dictionaryDao.getCurrencies.flatMap { currencies =>
dictionaryDao.getPropertyTypes.flatMap { propertyTypes =>
Future.successful(Dictionaries(
currencies,
propertyTypes
))
}
}
}
【问题讨论】:
标签: scala playframework slick