我正在使用喷雾构建 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?