在下面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)
}
}
问题在以下代码段中:
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)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句