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

Posted

技术标签:

【中文标题】Play2 + Casbah:如何为 ObjectId 提供隐式写入【英文标题】:Play2 + Casbah: How to provide an implicit Writes for ObjectId 【发布时间】:2013-03-29 22:29:56 【问题描述】:

有一个简单的模型类,其中包含一些数据库 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 没有可用的隐式写入。 隐式 valimplicitFooWrites = Json.writes[Foo]

很明显缺少什么,但我不知道如何为 com.mongodb.casbah.commons.TypeImports.ObjectId 提供隐式写入。如何做到这一点?

【问题讨论】:

【参考方案1】:

该错误表示它不知道如何序列化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获得。

【讨论】:

以上是关于Play2 + Casbah:如何为 ObjectId 提供隐式写入的主要内容,如果未能解决你的问题,请参考以下文章

如何为测试环境配置Play

LINQ to Object - 如何为子组实现 WHERE 子句“如果至少有一个元素是”

C# Object to Json to Xml,如何为数组项生成xml元素

如何为数组-php中的每个索引添加一个新项目?

有没有更惯用的方法来使用 Casbah 检查密码?

带有 casbah 的 scala 案例类。接受 objectid 参数作为字符串或 objectid