2017-09-20 5 views
0

Ich habe tatsächlich ein Problem beim Zurückgeben eines Seq zurück zum Frontend.playframework scala typismismatch beim Zurückgeben eines Seq

Mein Code sieht wie folgt aus:

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") 
    }) 
    } 

Fehler Folgendes ist.

enter image description here

Dank für jeden Hinweis

Antwort

4

Blick auf die Art der eins Ihre Fehlermeldung sagt Ihnen, dass es ein Seq[Seq[Future[ContenetComponentModel]]] ist und nicht einfach ein Seq wie Sie dachten.

Es gibt zwei Probleme:

  1. Sie können keine Future (oder in Ihrem Fall eine Folge von Futures) zu Json schreiben.
  2. Sie müssen eine implizite Funktion im Bereich haben, um Ihre ContenetComponentModel in einen JSON-Wert zu konvertieren.

Je nachdem, was Sie Ihr Ergebnis aussehen soll, könnten Sie eins versuchen Abflachung und dann eine andere Future.sequence, aber ich denke, was Sie wirklich eine Menge Ihrer .map Anrufe zu tun sollten .flatMap Anrufe verändert zu vermeiden die Verschachtelung an erster Stelle.

Verwandte Themen