2016-04-25 5 views
0

Ich versuche, einen asynchrone PlayFramework Controller zu schreiben, die eine Anforderung POST erhält und erstellt ein neues Objekt in der Datenbank:Playframework Scala Async-Controller für JSON Anfrage

def register = Action(BodyParsers.parse.json) { request => 
    val businessInfoResult = request.body.validate[BusinessInfo] 
    businessInfoResult.fold(errors =>{ 
     BadRequest(Json.obj("status"-> "Error", "message"->JsError.toJson(errors))) //Error on this line 
    }, businessInfo=> { 
     //save the object 
     Ok(Json.obj("status" ->"OK", "message" -> ("Place '"+ businessInfo.businessName +"' saved."))) //Error on this line 

    }) 
    } 

jedoch halten sie unter den Fehler zu werfen:

reference to Json is ambiguous; it is imported twice in the same scope by import play.libs.Json and import play.mvc.BodyParser.Json AsyncController.scala 

die Fehler werden an der Linie 108 und 105, die mit kommentierten //Error on this line oben Linien entsprechen geworfen (Linien mit BadRequest (..) und Ok (..))

Wie behebe ich dieses Problem? Ich kann einen neuen JsValue (Map (..)) verwenden, frage mich aber, ob es anders geht.

Vielen Dank für Ihre Hilfe.

Antwort

0

Statt Json möchten Sie wahrscheinlich play.libs.Json anrufen. Das Problem hierbei ist, dass Sie unter Berücksichtigung der Importe in Ihrer Datei zwei Objekte/Klassen namens Json haben und der Compiler nicht auswählen kann, welche er verwenden soll. Wenn Sie play.libs.Json aufrufen, geben Sie dem Compiler genügend Informationen.

0

könnten Sie einen oder mehrere Aliase in Ihrer Importe:

import play.libs.Json 
import play.mvc.BodyParser.{Json => JsonParser} 

JsonParser ist nur ein Beispiel. Sie können alles verwenden, was Sie möchten, solange es innerhalb der Datei eindeutig ist.

Anstatt Json (für play.mvc.BodyParser.Json) zu schreiben, könnten Sie jetzt den Alias ​​JsonParser verwenden.

Aber sind Sie sicher, dass Sie auch play.mvc.BodyParser.Json importieren müssen? Weil du es anscheinend nicht benutzt.