Mongodb 带有任意JSON分支的reactivemongo BSON编写器/读取器(也使用spray)
我正在使用喷雾剂构建RESTAPI。除本案例课程外,所有课程均运行良好:Mongodb 带有任意JSON分支的reactivemongo BSON编写器/读取器(也使用spray),mongodb,scala,bson,reactivemongo,spray-json,Mongodb,Scala,Bson,Reactivemongo,Spray Json,我正在使用喷雾剂构建RESTAPI。除本案例课程外,所有课程均运行良好: case class User(name: String, places: List[String], data: List[JsObject]) 这里的关键问题是数据参数。它包含一个json对象,具有任意数量的成员、类型和级别,但仍然是有效的json 使用spray,我能够使用以下方法正确序列化/反序列化请求/响应: object UserProtocol extends DefaultJsonProtocol {
case class User(name: String, places: List[String], data: List[JsObject])
这里的关键问题是数据
参数。它包含一个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)
}
}
}
问题在于为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分支为reactivemongo正确地序列化/反序列化BSON?这是一个简单的示例,演示了如何为模型定义读取器和写入器。希望能有帮助
您必须提供BSON/JSON转换。对于Play JSON,可以在Play plugin.cchantep中找到它