我在我的 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") )