类型不匹配;找到:需要的对象:play.api.mvc.Result

时间:2014-01-27 02:08:29

标签: scala playframework-2.2

在随后的代码中的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)
            }
}

1 个答案:

答案 0 :(得分:1)

问题在于此片段:

userOpt.map { user =>
  Action(BodyParsers.parse.urlFormEncoded) { request => f(user)(request) }(request)
}.getOrElse {  
  onUnauthorized(request)
}

map你正在呼叫的Action,它只返回Action,而不是ResultgetOrElse返回的类型是一个对象,因为它是ResultAction的共同祖先。

由于您同时拥有调用f所需的用户和请求,因此您应该这样做:

userOpt.map { user =>
  f(user)(request)
}.getOrElse {  
  onUnauthorized(request)
}
相关问题