2

我正在使用喷雾构建 REST API。除了这个案例类之外,一切都运行良好:

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

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

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

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

// ...

import demo.UserProtocol._

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

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

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 以用于响应式mongo?

4

1 回答 1

0

这是一个简单的示例,说明了如何为模型定义读取器和写入器。希望能帮助到你。

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

于 2015-07-31T06:01:04.863 回答