sah Der problematische Code mehr oder weniger wie folgt aus:
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)))
}
}
Das Problem war hier, dass dieses Makro offenbar nicht für die Klassen innerhalb Methoden definiert funktioniert. Dies ist jedoch keine beunruhigende Einschränkung, da wir solche Dinge eher nicht tun.
Ausgabe Klasse def beheben kann woanders, wie Objektebene
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)))
}
}
oder Dateiebene
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)))
}
}
ich bewegt werden verstehen, dass dies nur zu Testzwecken war minimal Beispiel zu sehen, aber Ich werde noch erwähnen, wie wir Klassen normalerweise mit Writes
definieren.
object Resident {
implicit val residentWrites = Json.writes[Resident]
}
case class Resident(name: String, age: Int, role: Option[String])
Auf diese Weise, wenn Sie die Resident
importieren, wird seine schreibt in dem impliziten Umfang sein.
Für mich versagt es einfach nicht. Ich öffne amm repl, erhalte die Abhängigkeit über 'load.ivy (" com.typesafe.play "%%" play "%" 2.5.0 ")' und füge die 4 Zeilen Code ein, die '{" name ":" john "erhalten. , "Alter": 33} '. Dieser Fehler tritt normalerweise auf, wenn Ihre "Klasse" keine "Fallklasse" ist, aber hier ist alles in Ordnung. –
Wow, ich wusste nichts über Ammonit! Es sieht gut aus, ich werde das jetzt versuchen –
ja, es funktioniert auch für mich von der amm repl. : O Ich überprüfe noch einmal mein Projekt –