【发布时间】:2018-05-08 23:22:31
【问题描述】:
将 MongoDB 与 Play Framework 和 ReactiveMongo Play JSON library 一起使用;我正在尝试正确配置 form。我有一些日期存储在 MongoDB 中,它们位于 ISODate 包装器/monad 中,并作为 JSObject 处理:
Json.obj("dateOfBirth" -> Json.obj("$date" -> dateTimeLong))
我使用automated mapping in Play 的案例类的一个例子是:
case class FormData(_id: Option[BSONObjectID], name: String, dateOfBirth: Option[JSObject])
这是表格:
object MyForm {
val form = Form(
mapping(
"_id" -> ignored(Option.empty[BSONObjectID]),
"name" -> nonEmptyText,
"dateofBirth" -> ? // not `date` or `optional(date)`
)
)
}
我认为我需要在form 中自定义绑定dateOfBirth 字段,但这是我遇到困难的地方。我找不到在哪里包含一个隐式对象来格式化一个新类型,因为 shown here 和 this 也没有帮助我解决这个问题(看起来它现在可能已经过时了)。
我认为bind 方法可能看起来像这样:
def bind(date: Date, dateFieldName: String): JsObject = {
val longDate = new DateTime(date.getTime())
.withZoneRetainFields(DateTimeZone.UTC)
.withZone(DateTimeZone.getDefault())
.getMillis
Json.obj(s"$$$dateFieldName" -> JsNumber(longDate))
}
但我可能是错的,尝试一下会很好,但正如我所说,我似乎无法找到插入 custom formatter 的正确位置 - 我认为这应该在 companion 对象中 of FormData(其中格式用于嵌套字段)。事实并非如此,所以我再次接近社区。感谢您的任何建议 - 特别是如果有更好的方法来处理这个问题。
【问题讨论】:
-
说真的 - 没有人对此有所了解吗?
标签: json mongodb scala playframework