我正在使用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?
答案 0 :(得分:0)
这是一个简单的例子,说明了如何为模型定义读者和作者。希望它有所帮助。
https://github.com/luongbalinh/play-mongo/blob/master/app/models/User.scala