在随后的代码中的getOrElse
,我收到以下错误:
type mismatch; found : Object required: play.api.mvc.Result
有什么问题?我正在使用playframework2.2
def onUnauthorized(request: RequestHeader) =
Results.BadRequest(Json.obj("error" -> "Invalid signature"))
def withUserSigner(f: User => Request[Map[String, Seq[String]]] => Result) = Action(BodyParsers.parse.urlFormEncoded) {
request =>
val userOpt = request.body.get(SRT_ACCESS_KEY).flatMap { email =>
DB.withConnection { implicit connection =>
User.findByEmail(email.mkString).flatMap { user =>
getSigner(request.method, request.path, request.body, user)
}
}
}
userOpt.map { user =>
Action(BodyParsers.parse.urlFormEncoded) { request => f(user)(request) }(request)
}.getOrElse { *//got error in this line "type mismatch; found : Object required: play.api.mvc.Result"*
onUnauthorized(request)
}
}
答案 0 :(得分:1)
问题在于此片段:
userOpt.map { user =>
Action(BodyParsers.parse.urlFormEncoded) { request => f(user)(request) }(request)
}.getOrElse {
onUnauthorized(request)
}
在map
你正在呼叫的Action
,它只返回Action
,而不是Result
。 getOrElse
返回的类型是一个对象,因为它是Result
和Action
的共同祖先。
由于您同时拥有调用f
所需的用户和请求,因此您应该这样做:
userOpt.map { user =>
f(user)(request)
}.getOrElse {
onUnauthorized(request)
}