istnieją dwie klasy Foo
i Bar
. Foo
zawiera pole Bar
. Pytanie brzmi, jak zaimplementować domyślny json Writes
dla klasy Foo
?Jak zaimplementować ukryte zapisy Json obiektu osadzonego w Play Framework 2.x
Oto kod:
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
)
}
}
}
Kiedy próbuję skompilować, pojawia się następujący błąd:
No Json deserializer found for type models.Bar. Try to implement an implicit Writes or Format for this type.
Nie rozumiem ten błąd kompilatora, ponieważ realizowane niejawna Writes dla modeli. Jaki jest tutaj problem?
Nicea. Wielkie dzięki. Deklaracja klasy "Bar" przed klasą "Foo" rozwiązuje problem. I dzięki za podpowiedź z nowymi funkcjami jsonowymi Play2.1. To naprawdę skraca liczbę linii do napisania. – schub
Próbuję dowiedzieć się, jak korzystać z reaktywnego mongodb, podążając za ich przykładem i nie skompilowałoby się. Po przeczytaniu tego posta mogłem zmodyfikować istniejący i pobrać go, aby opublikować użytkownika. Używam teraz 2,4. Czy istnieją inne skróty lub zmiany, które istnieją już w wersji 2.4? – pitchblack408