Il codice problematico sembrava più o meno così:
import play.api.libs.json._
object Test {
def main(args: Array[String]): Unit = {
case class Resident(name: String, age: Int, role: Option[String])
implicit val residentWrites = Json.writes[Resident]
println(Json.toJson(Resident("john", 33, None)))
}
}
Il problema qui è che questa macro a quanto pare non funziona per le classi definite all'interno di metodi. Questa non è una limitazione preoccupante anche se preferiamo non fare questo genere di cose.
Per risolvere questione di classe def può essere spostato da qualche altra parte, come livello di oggetto
object Test {
case class Resident(name: String, age: Int, role: Option[String])
def main(args: Array[String]): Unit = {
implicit val residentWrites = Json.writes[Resident]
println(Json.toJson(Resident("john", 33, None)))
}
}
o livello di file
case class Resident(name: String, age: Int, role: Option[String])
object Test {
def main(args: Array[String]): Unit = {
implicit val residentWrites = Json.writes[Resident]
println(Json.toJson(Resident("john", 33, None)))
}
}
ho capito che questo era solo a scopo di test per vedere un esempio minimo, ma Citerò ancora come di solito definiamo le classi con Writes
.
object Resident {
implicit val residentWrites = Json.writes[Resident]
}
case class Resident(name: String, age: Int, role: Option[String])
In questo modo, ogni volta che si importa il Resident
, le sue scritture sarà nel campo di applicazione implicita.
Per me semplicemente non fallisce. Apro amm repl, ottieni dipendenza tramite 'load.ivy (" com.typesafe.play "%%" play "%" 2.5.0 ")' e incolla le 4 righe di codice ottenendo '{" name ":" john " , "età": 33} '. Questo errore si verifica in genere quando il tuo 'class' non è un' case class', ma qui va tutto bene. –
wow, non sapevo di Ammonite! Sembra fantastico, proverò questo ora –
sì, funziona anche per me dal amm repl. : O controllerò di nuovo il mio progetto –