簡體   English   中英

找不到類型為play.api.libs.json.JsValue的Json序列化程序作為JsObject

[英]No Json serializer as JsObject found for type play.api.libs.json.JsValue

我正在嘗試將我的項目從使用play2-reactivemongo版本0.10.5.0.akka23到使用版本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)

但是,使用新版本時,第三行給出了編譯錯誤:

[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]                      ^

將第二行更改為

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

解決了這個問題,但是我在代碼中有很多這樣的想法,我希望有一個更簡單的解決方案。

也剛被這個咬住了。 訣竅是刪除

import play.modules.reactivemongo.json._

而是使用

import reactivemongo.play.json._

play.modules版本不提供身份OWriter。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM