【问题标题】:Scala Slick how can I convert a select query to JsonScala Slick 如何将选择查询转换为 Json
【发布时间】:2016-05-13 04:39:30
【问题描述】:

我正在使用 slick 3.1.1,但无法弄清楚如何在 Json 中转换查询。我有这个返回全名的简单查询

def listfollowing() = Action {

    val setup = DBIO.seq(
      sql"""select p.fullname from profiles p join relations r on(p.id=r.following) where r.me=32;""".as[(String)]
    )
    val setupFuture = db.run(setup)


    Ok(Json.toJson(setupFuture.toString))


  }

这只是给出了这个结果

“scala.concurrent.impl.Promise$KeptPromise@6a3903”

任何建议都会很棒

这里有一些附加信息:

import play.api.data.Form
import play.api.libs.json.{Json, JsValue}
import play.api.mvc.{Action, Controller}
import slick.dbio.DBIO
import slick.driver.PostgresDriver.api._
import play.api.data.Forms._
import scala.concurrent.ExecutionContext.Implicits.global

  val db= Database.forConfig("database")
  try {
    // ...
  } finally db.close

我按如下方式连接到 slick

database {
  dataSourceClass = "org.postgresql.ds.PGSimpleDataSource"
  properties = {
    databaseName = "mydbname"
    user = "user"
    password = "password"
  }
  numThreads = 10

}

【问题讨论】:

    标签: json scala playframework slick slick-3.0


    【解决方案1】:

    setupFuture 在您的情况下是Future,这意味着它(可能)在未来保持一个值。要“进入”Future,您需要在其上使用.map(如果您更熟悉前端世界,这类似于 Javascript Promises / .then)。 map 的主体将在未来值可用时运行。

    这是一个返回真实数据的实现:

    def listfollowing() = Action.async {
      val setup = DBIO.seq(
        sql"""select p.fullname from profiles p join relations r on(p.id=r.following) where r.me=32;""".as[String]
      )
      db.run(setup).map { result =>
        Ok(Json.toJson(result.toString))
      }
    }
    

    特别注意Action.async

    【讨论】:

    • 哦,好的,我刚刚运行了它,我有几个问题。如果我像这样输入代码,我会在 db.run(setup) 上得到一个错误,即:找不到隐式 ExecutionContext。您可以将(隐式 ec:ExecutionContext)参数传递给您的方法或导入 scala.concurrent.ExecutionContext.Implicits.global。然后我导入 scala.concurrent.ExecutionContext.Implicits.global 并编译但我得到另一个错误: IllegalStateException: Cannot initialize ExecutionContext; AsyncExecutor 已经关闭。我将在上面发布我的设置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多