1

play2-reactivemongoプロジェクトを using version0.10.5.0.akka23からusing versionに移行しようとしてい0.11.7.play23ます。この質問で対処されている問題を修正するために、次のインポートを既に追加しました。

import play.modules.reactivemongo.json._

以前のバージョンでは、次のコードが機能しました。

val updateEntity = Json.obj("_id" -> Json.obj("$oid" -> id))
val entity = Json.parse(stringJson)
collection.update(updateEntity, entity)

ただし、新しいバージョンを使用すると、3 行目でコンパイル エラーが発生します。

[error] No Json serializer as JsObject found for type play.api.libs.json.JsValue. Try to implement an implicit OWrites or OFormat for this type.
[error]     collection.update(updateEntity, entity)
[error]                      ^

私は暗黙の導入を試みましたOWriter

implicit val toJsObject: OWrites[JsValue] = OWrites.apply(_.as[JsObject])

しかし、それは暗黙の宣言の競合を引き起こします:

[error] ambiguous implicit values:
[error]  both value toJsObject of type play.api.libs.json.OWrites[play.api.libs.json.JsValue]
[error]  and object JsObjectDocumentWriter in trait ImplicitBSONHandlers of type play.modules.reactivemongo.json.JsObjectDocumentWriter.type
[error]  match expected type collection.pack.Writer[play.api.libs.json.JsObject]
[error]     collection.update(updateEntity, entity)
[error]                      ^

2行目をに変更

val entity = Json.parse(stringJson).as[JsObject]

問題は修正されましたが、コードの周りにこれらがたくさんあり、より簡単な解決策を望んでいました.

4

1 に答える 1