Comment mettre en œuvre implicite Json Écrit de l'objet incorporé dans le Jeu Framework 2.x
il y a deux classes Foo
et Bar
. Foo
contient un champ de Bar
. La question est, comment puis-je mettre en œuvre un implicite json Writes
pour la classe Foo
?
Voici le code:
package models
import play.api.libs.json._
case class Foo(id: String, bar: Bar)
object Foo {
implicit val implicitFooWrites = new Writes[Foo] {
def writes(foo: Foo): JsValue = {
Json.obj(
"id" -> foo.id,
"bar" -> foo.bar
)
}
}
}
case class Bar(x: String, y: Int)
object Bar {
implicit val implicitBarWrites = new Writes[Bar] {
def writes(bar: Bar): JsValue = {
Json.obj(
"x" -> bar.x,
"y" -> bar.y
)
}
}
}
Lorsque j'essaie de compiler, j'obtiens l'erreur suivante:
Pas de Json deserializer trouvé pour le type de modèles.Bar. Essayez de mettre en œuvre un
implicite de l'Écrit ou de Format pour ce type.
Je ne comprends pas cette erreur de compilation, depuis que j'ai mis en place un implicite Écrit pour les modèles.Barre de classe. Quel est le problème ici?
Vous devez vous connecter pour publier un commentaire.
C'est une question de visibilité, lors de la déclaration de l'implicite Écrit[Foo] vous n'êtes pas rendre visible l'implicite Écrit[Bar] à:
Aussi, si vous utilisez Jouer 2.1+ assurez-vous de vérifier la toute nouvelle utilisation de 2.10 macros: http://www.playframework.com/documentation/2.1.0/ScalaJsonInception
Si vous êtes heureux avec l'utilisation des classes de cas et le val/vars les noms utilisés comme clés dans la sortie json, comme dans votre cas BTW, vous pouvez utiliser les deux one-liners:
Qui vous donnera l'équivalent exact: