如何在Akka-http中编组和解组mongo ObjectId

时间:2018-07-06 18:21:13

标签: json mongodb scala akka akka-http

如何在Akka-http中将mongo ObjectId转换为字符串ID,反之亦然 用于JSON响应 对于此用户类

case class User(_id: ObjectId, email: String, name: Option[String], birthDate: Option[String])

此jsonFormat4不起作用。

implicit val userFormat = jsonFormat4(User.apply)

抛出此错误。

错误:(21,40)找不到类型为JsonSupport.this.JF [org.mongodb.scala.bson.ObjectId]的证据参数的隐式值   隐式val userFormat = jsonFormat4(User.apply)

1 个答案:

答案 0 :(得分:2)

您需要为ObjectId类型放置一个自定义序列化程序:

object MongoDBProtocol extends DefaultJsonProtocol {

  implicit object ObjectIdSerializer extends RootJsonFormat[ObjectId] {
    override def write(obj: ObjectId): JsValue = {
      JsString(obj.toHexString)
    }

    override def read(json: JsValue): ObjectId = {
      val ob = new ObjectId(json.toString())
      ob
    }
  }
}

然后将该对象导入您的路由范围,它应该可以工作。