所以,基本上我想用play框架做的是:
代码:
def allSamplesJson = Action { implicit request =>
request.session.get("l").map { value =>
value match {
case "i" => DBAction { conn =>
implicit val dbs = conn.dbSession
val all = models.CodeSampleTable.allSamples()
Ok(Json.toJson(all))
}
case _ => Unauthorized(unautStr)
}
}.getOrElse {
Unauthorized(unautStr)
}
}
基本上,如果用户无权获取json记录,我甚至不想触摸数据库/打开连接等。上面的代码不起作用(不编译)。我该如何做到这一点?
这是错误:
答案 0 :(得分:1)
你不能将DBAction
包裹在另一个Action
中,因为DBAction
没有返回Result
,它可能返回Action[A]
之类的内容}。这意味着您尝试在较高级Action
(Result
和Action[A]
)内返回混合类型,因此编译器会将返回类型推断为Object
,它应该是Result
。
正如@Mikesname建议的那样,您需要将DBAction
替换为DB.withSession
,这将提供您需要的数据库会话,并允许您返回正确的类型:
DB.withSession { conn =>
val all = models.CodeSampleTable.allSamples()
Ok(Json.toJson(all))
}