reactivemongo BSON编写器/读卡器具有任意JSON分支(也使用喷雾)

时间:2015-04-08 20:13:43

标签: mongodb scala bson reactivemongo spray-json

我正在使用spray构建REST API。一切都运作良好,除了这个案例类:

case class User(name: String, places: List[String], data: List[JsObject])

这里的关键问题是data参数。它包含一个具有任意数量的成员,类型和级别的json对象 - 但仍然是有效的json。

使用spray,我可以使用以下方法正确地序列化/反序列化请求/响应:

object UserProtocol extends DefaultJsonProtocol {
  implicit val userResonseFormat = jsonFormat3(User)
}

// ...

import demo.UserProtocol._

post {
  path("users") {
    entity(as[User]) { user: User =>
      complete(user)
    }
  }
}

问题是读取和写入BSON for reactivemongo。我似乎无法弄清楚如何完成这些:

implicit object UserWriter extends BSONDocumentWriter[User] {
  def write(user: User): BSONDocument = BSONDocument(
    "name" -> user.name,
    "places" -> user.places,
    "data" -> ???
}

implicit object UserReader extends BSONDocumentReader[User] {
  def read(doc: BSONDocument): User = {
    User(
      doc.getAs[String]("name").get,
      doc.getAs[List[String]]("places").get,
      ???
  }
}

在???的地方,我怎样才能获得这个任意的JSON分支来正确地序列化/反序列化BSON for reactivemongo?

1 个答案:

答案 0 :(得分:0)

这是一个简单的例子,说明了如何为模型定义读者和作者。希望它有所帮助。

https://github.com/luongbalinh/play-mongo/blob/master/app/models/User.scala