播放框架错误:类型不匹配 - 发现 scala.concurrent.Future[play.api.mvc.Result] required: play.api.mvc.Result

Posted

技术标签:

【中文标题】播放框架错误:类型不匹配 - 发现 scala.concurrent.Future[play.api.mvc.Result] required: play.api.mvc.Result【英文标题】:Play framework error: type mismatch - found scala.concurrent.Future[play.api.mvc.Result] required: play.api.mvc.Result 【发布时间】:2019-03-19 15:19:03 【问题描述】:

我在 play-scala 项目的控制器中有以下代码。

def removeItemFromShoppingBag: Action[JsValue] = Action(parse.json) 
    implicit request =>
      request.body.validate[RemoveItem]
       .fold(
         errors =>
            BadRequest(Json.obj("status" -> "KO", "message" -> JsError.toJson(errors))),
         removeItem => 
           productService.retrieve(removeItem.itemID).flatMap 
             case Some(item) => productInTheBagService.retrieve(item.id).flatMap 
               case Some(itemInTheBag) =>
                 Future.successful(
                   Ok(ApiResponse("shopping.products", Messages("request.ok")))
                 )
               case None =>
                 Future.successful(
                   BadRequest(ApiResponse("home.shopping.item.not.available",
                      Messages("shopping.item.not.available")))
          )
        

        case None =>
          Future.successful(
            BadRequest(ApiResponse("home.shopping.item.not.available",
              Messages("shopping.item.not.available")))
          )
        
      
    )
   

编译时出现如下错误:

Controller.scala:236:62: type mismatch;
[error]  found   : scala.concurrent.Future[play.api.mvc.Result]
[error]  required: play.api.mvc.Result
[error]           productService.retrieve(removeItem.itemID).flatMap 
[error]                                                              ^
[error] one error found

我已经阅读了类似问题的答案: Playframework: Type mismatch found scala.concurrent.Future[play.api.mvc.Result] required: play.api.mvc.Result 但这没有帮助。

如果有任何帮助,我将不胜感激。

【问题讨论】:

【参考方案1】:

您需要Action.async(parse.json) 才能返回Future

【讨论】:

非常感谢。我刚刚将 Action(parse.json) 更改为 Action(parse.json).async 并将 BadRequest(Json.obj(...)) 包装到 Future.successful() 并编译。

以上是关于播放框架错误:类型不匹配 - 发现 scala.concurrent.Future[play.api.mvc.Result] required: play.api.mvc.Result的主要内容,如果未能解决你的问题,请参考以下文章

火花类型不匹配错误 - 发现:任何但必需:列表[重复]

Xcode 6.1:发现多个名为“count”的方法,结果、参数类型或属性不匹配

CSS last 的类型在仍在加载时不匹配

UI 测试失败:发现多个匹配错误

资产音频播放器库与类不匹配

如何将 Youtube 视频与通过 Spotify 播放的歌曲匹配