【问题标题】:Implicit value not found for BSON Writer in reactivemongo在 reactivemongo 中找不到 BSON Writer 的隐式值
【发布时间】:2014-06-09 05:15:08
【问题描述】:

我有一个非常简单的案例类,它是一个更大的案例类的一部分。

case class PublisherStatus(status: String)
case class Publisher(id: Option[BSONObjectID], name: String, status: PublisherStatus, keywords: List[String], updatedAt: Option[DateTime], outputChannelIP: String, outputChannelName: String)

我已经为它定义了 BSON Reader 和 Writer,如下所示。

  implicit object StatusBSONReader extends BSONDocumentReader[PublisherStatus] {
    def read(doc: BSONDocument): PublisherStatus =
      PublisherStatus(
        doc.getAs[String]("status").get
      )
  }

  implicit object StatusBSONWriter extends BSONDocumentWriter[PublisherStatus] {
    def write(status: PublisherStatus): BSONDocument =
      BSONDocument(
        "status" -> status.status)
  }

但是,当我尝试执行以下操作时,出现编译错误。

  def updateState(id: String, s: String) {
    import models.PublisherBSONWriter._
    implicit val statusWrites = Json.writes[PublisherStatus]
    val objectId = new BSONObjectID(id)
    val status = PublisherStatus(s)
    val modifier = BSONDocument("$set" -> status)

    val updateFuture = collection.update(BSONDocument("_id" -> objectId), modifier)

  }

错误 -

could not find implicit value for parameter writer: reactivemongo.bson.BSONWriter[models.PublisherStatus, _ <: reactivemongo.bson.BSONValue]
[error]     val modifier = BSONDocument("$set" -> status)
[error]                                        ^
[error] one error found
[error] (compile:compile) Compilation failed

【问题讨论】:

    标签: scala implicit reactivemongo


    【解决方案1】:

    PublisherStatus 的读写器不应是 BSONDocumentReader 和 BSONDocumentWriter,而是 BSONReader 和 BSONWriter。

    或者为了让事情变得更简单,请使用BSONHandler。类似于

    implicit val bson = new BSONHandler[BSONString, PublisherStatus] {
      def read(bson: BSONString) = PublisherStatus(bson.value)
      def write(status: PublisherStatus) = BSONString(status.status)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 2020-06-26
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 2017-02-02
      相关资源
      最近更新 更多