播放框架错误:类型不匹配 - 发现 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的主要内容,如果未能解决你的问题,请参考以下文章