J'ai le code suivant qui fonctionne dans une application console lors du référencement de "org.reactivemongo" %% "play2-reactivemongo" % "0.10.5.0.akka23"
quand je mets à jour la référence à "org.reactivemongo" % "play2-reactivemongo_2.11" % "0.11.0.play23-M3"
, je reçois:
Aucun sérialiseur Json en tant que JsObject trouvé pour le type play.api.libs.json.JsObject. Essayez d'implémenter un OWrites ou OFormat implicite pour ce type.
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]
}
et alors
val collection = db.collectionJSONCollection
val query = Json.obj()
val cursor = collection.find(query).
cursor[GoogleToken](ReadPreference.nearest).
collect[List]()
Qu'est-ce que je fais mal?
La version finale de ReactiveMongo 0.11 a été publiée ("org.reactivemongo" %% "play2-reactivemongo" % "0.11.0.play23"
).
Comme indiqué dans la documentation mise à jour , pour les conversions BSON/JSON par défaut, il est recommandé d’avoir: import play.modules.reactivemongo.json._, ImplicitBSONHandlers._
.
Le mien a fonctionné après avoir ajouté: Importer play.modules.reactivemongo.json ._ Importer play.modules.reactivemongo.json.collection._
Dans mon cas, je nourrissais ReactiveMongo (insert
) avec un JsValue
au lieu d'un JsObject
. Pour y remédier, après l’ajout de import play.modules.reactivemongo.json._
, j’ai également dû changer ma Writes
implicite dans OWrites
:
de
implicit val myWrites: Writes[A] = new Writes[A] {
def writes(a: A) = Json.obj(...)
à
implicit val myWrites: OWrites[A] = new OWrites[A] { <-- NOTE THE 'O' before 'Writes'
def writes(a: A) = Json.obj(...)
Pour moi, ajouter cette importation a fonctionné.
import play.modules.reactivemongo.json._