没有为类型为play.api.libs.json.JsObject的JsObject找到Json序列化程序

时间:2015-06-30 15:24:37

标签: json scala reactivemongo

在引用"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序列化程序。尝试为此类型实现隐式OWrites或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 collection = db.collectionJSONCollection

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

我做错了什么?

5 个答案:

答案 0 :(得分:21)

ReactiveMongo 0.11的最终版本已发布("org.reactivemongo" %% "play2-reactivemongo" % "0.11.0.play23")。

updated documentation所示,对于默认的BSON / JSON转换,建议您使用:import play.modules.reactivemongo.json._, ImplicitBSONHandlers._

答案 1 :(得分:6)

在我的情况下,我使用insert而不是JsValue向ReactiveMongo(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(...)

答案 2 :(得分:6)

添加后我的工作结果如下: import play.modules.reactivemongo.json._ import play.modules.reactivemongo.json.collection ._

答案 3 :(得分:0)

对我来说,添加此导入有效。

import play.modules.reactivemongo.json._

答案 4 :(得分:0)

尝试添加

导入reactmongo.play.json ._