【问题标题】:playframework scala typemismatch while returning a seq在返回 seq 时播放框架 scala 类型不匹配
【发布时间】:2017-09-20 22:33:26
【问题描述】:

在将 Seq 返回到前端时,我实际上遇到了问题。

我的代码如下所示:

def getContentComponentsForProcessSteps: Action[AnyContent] = Action.async { implicit request =>
    println("-----------------------------------------------New Request--------------------------------------------------------")
    println(request.body.asJson)
    request.body.asJson.map(_.validate[ProcessStepIds] match {
      case JsSuccess(steps, _) =>

        val contentComponents: Seq[Future[Seq[Future[ContentComponentModel]]]] = steps.steps.map(stepId => { //foreach
          // Fetching all ContentComponent Relations
          contentComponentDTO.getContentComponentsByStepId(stepId).map(contentComponents => { // Future[Seq[ContentComponent_ProcessStepTemplateModel]]
            // Iteration über die Gefundenen Relations
            contentComponents.map(contentComponent => { // foreach
              // Fetch Content Component
              contentComponentDTO.getContentComponentById(contentComponent.contentComponent_id).flatMap(contentComponent => { // Future[Option[ContentComponentModel]]
                // Fetch Content Component Data for the types
                val res = getContentComponentDataforOneContentComponent(contentComponent.get)
                res.map(con => con)
              })
            })
          })
        })

        Future.sequence(contentComponents).map(eins => {
          println(eins)
            Ok(Json.obj("Content Components Return" -> "true", "result" -> eins))
        })

      case JsError(_) =>
        Future.successful {
          BadRequest("Can't fetch Content Components")
        }
      case _ => Future.successful {
        BadRequest("Can't fetch Content Components")
      }
    }).getOrElse(Future.successful {
      BadRequest("Can't fetch Content Components")
    })
  }

错误如下。

感谢任何提示

【问题讨论】:

    标签: scala playframework


    【解决方案1】:

    查看eins 的类型,您的错误消息告诉您它是Seq[Seq[Future[ContenetComponentModel]]],而不是像您想象的那样简单的Seq

    这样做有两个问题:

    1. 您不能向 Json 写入 Future(或者在您的情况下,是一系列期货)。
    2. 您需要在范围内有一个隐式函数才能将您的 ContenetComponentModel 转换为 JSON 值。

    根据您希望结果的样子,您可以尝试将eins 展平,然后使用另一个Future.sequence,但我认为您真正应该做的是将很多.map 调用更改为@首先调用 987654329@ 避免嵌套。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多