No se ha encontrado el serializador Json como JsObject para el tipo play.api.libs.json.JsObject
scala reactivemongo (5)
Tengo el siguiente código que funciona en una aplicación de consola cuando se hace referencia a
"org.reactivemongo" %% "play2-reactivemongo" % "0.10.5.0.akka23"
cuando actualizo la referencia a
"org.reactivemongo" % "play2-reactivemongo_2.11" % "0.11.0.play23-M3"
obtengo:
No se ha encontrado el serializador Json como JsObject para el tipo play.api.libs.json.JsObject. Intente implementar un OWrites u OFormat implícito para este tipo.
import org.joda.time.DateTime
import reactivemongo.bson.BSONObjectID
import play.modules.reactivemongo.json.BSONFormats._
case class GoogleToken
(
id: Option[BSONObjectID],
name: String,
emailAddress: String,
refreshToken: String,
expires: DateTime
)
object GoogleToken {
import play.api.libs.json.Json
// Generates Writes and Reads
implicit val googleTokenFormat = Json.format[GoogleToken]
}
y entonces
colección val = db.collectionJSONCollection
val query = Json.obj()
val cursor = collection.find(query).
cursor[GoogleToken](ReadPreference.nearest).
collect[List]()
¿Qué estoy haciendo mal?
El mío funcionó después de agregar: import play.modules.reactivemongo.json._ import play.modules.reactivemongo.json.collection._
En mi caso, estaba alimentando ReactiveMongo (
insert
) con un
JsValue
lugar de un
JsObject
.
Para solucionarlo, después de agregar
import play.modules.reactivemongo.json._
, también tuve que cambiar mis
OWrites
implícitas en
OWrites
:
de
implicit val myWrites: Writes[A] = new Writes[A] {
def writes(a: A) = Json.obj(...)
a
implicit val myWrites: OWrites[A] = new OWrites[A] { <-- NOTE THE ''O'' before ''Writes''
def writes(a: A) = Json.obj(...)
Para mí, agregar esta importación funcionó.
import play.modules.reactivemongo.json._
Se ha publicado la versión final de ReactiveMongo 0.11 (
"org.reactivemongo" %% "play2-reactivemongo" % "0.11.0.play23"
).
Como se indica en la
documentación actualizada
, para las conversiones BSON / JSON predeterminadas, se recomienda tener:
import play.modules.reactivemongo.json._, ImplicitBSONHandlers._
.
intenta agregar
import reactivemongo.play.json._