2015-01-07 4 views
6

Chiunque può mostrarmi come convertire POJO o istanza di classe in JSON in Play framework (in particolare Play v2.3.x) con Scala?Come convertire POJO in JSON in Play framework 2.3.x (Scala)?

Per esempio io ho il codice come questo:

case class Foo(name: String, address: String) 

def index = Action { 
     request => { 
     val foo = Foo("John Derp", "Jem Street 21") // I want to convert this object to JSON 
     Ok(Json.toJson(foo)) // I got error at here 
     } 
} 

Il messaggio di errore:

Impossibile scrivere un'istanza di bind.JsonNode com.fasterxml.jackson.data di risposta HTTP. Prova a definire un Writeable [com.fasterxml.jackson.databind.JsonNode]

UPDATE: ho scoperto l'errore precedente è causato da importazione sbagliata della classe Json, dovrebbe essere: import play.api.libs.json.Json. Tuttavia ho ancora ricevuto errore sul problema implicito di seguito.

Ho letto this tutorial, ma quando ho provato il codice implicito Writes[Foo]:

implicit val fooWrites: Writes[Foo] = (
     (JsPath \ "name").write[String] and 
      (JsPath \ "address").write[String] 
     )(unlift(Foo.unapply)) 

ho ottenuto Can't resolve symbol and e Can't resolve symbol unlift errore di IntelliJ. Anche il codice del tutorial sembra complesso solo per la conversione di un oggetto in JSON. Mi chiedo se c'è un modo più semplice per fare questo?

risposta

7

si può ottenere un'istanza Writes[Foo] utilizzando Json.writes:

implicit val fooWrites = Json.writes[Foo] 

Avere questa implicita nella portata è tutto ciò che serve per convertire Foo a JSON. Vedere la documentazione here e here per ulteriori informazioni sulle letture/scritture JSON.

+0

Ciao, molte grazie. Sai dove posso trovare una guida o una documentazione semplice sull'uso di Json in Play 2.3? Inoltre, puoi spiegare l'errore 'Impossibile risolvere i simboli e' (e' unlift' pure) nelle scritture implicite originali che ho provato? (vedere la domanda aggiornata, ho messo il codice lì) – null

+1

Per risolvere l'errore di simbolo è necessario importare 'play.api.libs.functional.syntax._'. I link alla documentazione che ho fornito dovrebbero rispondere alla tua domanda su "unlift" e contenere abbastanza informazioni generali su Play JSON. – edi

+1

Ciao, ancora una volta, grazie mille per l'aiuto. Mi chiedo perché Intellij non possa rilevare l'importazione. – null

1

Il secondo problema - Can't resolve symbol and - è un Intellij bug introdotto nella versione 1.3 del plugin Scala. Nella versione 1.3.3 del plugin Scala, adesso c'è una soluzione - set preferenza casella di controllo:

Lingue & Frameworks> Scala> Nucleo scheda (di default)> utilizzare vecchia algoritmo di ricerca implicita