0

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

1 回答 1

2

对于 Json 写入,您可以执行以下操作:

val userWrites = Json.writes[User].transform( js => js.as[JsObject] - "id"  ++ Json.obj("_id" -> js \ "id") )

但我不确定你可以对读取做类似的事情。

于 2013-08-22T20:38:59.110 回答