如何在 akka-http 中编组和解组 mongo ObjectId
How to marshall and unmarshall mongo ObjectId in akka-http
如何在 akka-http 中将 mongo ObjectId 转换为字符串 id,反之亦然
对于 JSON 响应
对于此用户 class
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)
您需要为 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
}
}
}
然后将此对象导入您的路由范围,它应该可以工作。
如何在 akka-http 中将 mongo ObjectId 转换为字符串 id,反之亦然 对于 JSON 响应 对于此用户 class
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)
您需要为 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
}
}
}
然后将此对象导入您的路由范围,它应该可以工作。