我正在使用光滑的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
我连接到光滑如下
database {
dataSourceClass = "org.postgresql.ds.PGSimpleDataSource"
properties = {
databaseName = "mydbname"
user = "user"
password = "password"
}
numThreads = 10
}
答案 0 :(得分:1)
setupFuture
是Future
,这意味着它(可能)将来会持有一个值。要获得Future
的“内部”,您需要.map
就可以了(如果您对前端世界更熟悉,则类似于Javascript Promise
s / {{1 }})。当未来的值可用时,.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))
}
}
。