Play2 + Casbah:如何为ObjectId提供隐式写入

时间:2013-03-29 22:29:57

标签: scala playframework casbah salat

有一个包含一些数据库ID的简单模型类。它看起来像这样:

case class Post(id: ObjectId, owner: Option[ObjectId], title: String)

object Post {
  implicit val implicitPostWrites = Json.writes[Post]
}

使用此代码,编译器会给我以下错误:

  

没有针对com.mongodb.casbah.commons.TypeImports.ObjectId的隐式写入。   隐式val implicitFooWrites = Json.writes [Foo]

很明显缺少什么,但我不知道如何为com.mongodb.casbah.commons.TypeImports.ObjectId提供隐式写入。怎么办呢?

1 个答案:

答案 0 :(得分:4)

错误表示它不知道如何序列化ObjectId,并希望您为其提供Writer。这是序列化它的一种方法:

object Post {

  implicit val objectIdWrites = new Writes[ObjectId] {
      def writes(oId: ObjectId): JsValue = {
        JsString(oId.toString)
      }
  }

   implicit val implicitPostWrites = Json.writes[Post]
}

有更多信息和解释here