Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 带有任意JSON分支的reactivemongo BSON编写器/读取器(也使用spray)_Mongodb_Scala_Bson_Reactivemongo_Spray Json - Fatal编程技术网

Mongodb 带有任意JSON分支的reactivemongo BSON编写器/读取器(也使用spray)

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 {

我正在使用喷雾剂构建RESTAPI。除本案例课程外,所有课程均运行良好:

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中找到它