我在Play应用程序中使用reactivemongo。我的模型使用属性id而不是_id。如何自动转换对象ID(_id),以便将其映射到我的模型的id属性。
目前我手工编写格式:
implicit val adviceFormat = (
(__ \ '_id).format[BSONObjectID] and
(__ \ 'lang).format[Lang] and
(__ \ 'title).format[String] and
(__ \ 'text).format[String] and
(__ \ 'reads).formatNullable[Seq[PeriodCounter]] and
(__ \ 'creationDate).format[DateTime] and
(__ \ 'updateDate).format[DateTime]
)(Advice.apply, unlift(Advice.unapply))
但我只想写:
implicit val adviceFormat = Json.format[Advice]
更新:
根据trevor.reznik的回答,我已经弄明白了。
implicit val adviceJSONReads = __.json.update((__ \ 'id).json.copyFrom((__ \ '_id).json.pick[JsObject] )) andThen Json.reads[Advice]
implicit val adviceJSONWrites = Json.writes[Advice].transform( js => js.as[JsObject] - "id" ++ Json.obj("_id" -> js \ "id") )
答案 0 :(得分:2)
对于Json写道,您可以执行以下操作:
val userWrites = Json.writes[User].transform( js => js.as[JsObject] - "id" ++ Json.obj("_id" -> js \ "id") )
但是我不确定你能用读取做类似的事情。