2014-01-27 44 views
1

在下面的代碼getOrElse,我發現了以下錯誤:類型不匹配;發現:所需的對象:play.api.mvc.Result

type mismatch; found : Object required: play.api.mvc.Result

有什麼不對?我usinging 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

的問題是在這個片段:

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

在你map你打電話Action剛剛返回Action,而不是Result。由getOrElse返回的類型是一個對象,因爲它是ResultAction的共同祖先。

既然你的用戶和調用f所需的要求,你應該這樣做:

userOpt.map { user => 
    f(user)(request) 
}.getOrElse { 
    onUnauthorized(request) 
} 
+0

大,現在的工作。 – niubility

相關問題