web-dev-qa-db-fra.com

Aucun sérialiseur Json en tant que JsObject trouvé pour le type play.api.libs.json.JsObject

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?

19
Greg R

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._.

21
cchantep

Le mien a fonctionné après avoir ajouté: Importer play.modules.reactivemongo.json ._ Importer play.modules.reactivemongo.json.collection._

6
user2904891

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(...)
6
ticofab

Pour moi, ajouter cette importation a fonctionné. 

import play.modules.reactivemongo.json._
0
Ashish Pushp