web-dev-qa-db-ja.com

タイプplay.api.libs.json.JsObjectのJsObjectとしてJsonシリアライザーが見つかりません

"org.reactivemongo" %% "play2-reactivemongo" % "0.10.5.0.akka23"を参照するときにコンソールアプリで機能する次のコードがあります

"org.reactivemongo" % "play2-reactivemongo_2.11" % "0.11.0.play23-M3"への参照を更新すると、次のようになります。

タイプplay.api.libs.json.JsObjectのJsObjectとしてのJsonシリアライザーが見つかりません。このタイプの暗黙的なOWriteまたはOFormatを実装してみてください。

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]
}

その後

valコレクション= db.collectionJSONCollection

val query = Json.obj()
val cursor = collection.find(query).
  cursor[GoogleToken](ReadPreference.nearest).
  collect[List]()

私は何が間違っているのですか?

19
Greg R

ReactiveMongo 0.11の最終リリースが公開されました("org.reactivemongo" %% "play2-reactivemongo" % "0.11.0.play23")。

更新されたドキュメント に示されているように、デフォルトのBSON/JSON変換では、import play.modules.reactivemongo.json._, ImplicitBSONHandlers._を使用することをお勧めします。

21
cchantep

追加した後、私のものはうまくいきました:import play.modules.reactivemongo.json._ import play.modules.reactivemongo.json.collection._

6
user2904891

私の場合、ReactiveMongo(insert)にJsValueではなくJsObjectを供給していました。これを修正するには、import play.modules.reactivemongo.json._を追加した後、Writesの暗黙的なOWritesも変更する必要がありました。

から

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

追加してみてください

インポートreactivemongo.play.json._

1

私にとって、このインポートを追加することはうまくいきました。

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