我有一个接收 JSON 正文的控制器。其中一个字段是表单的日期yyyy-mm-dd
。我想做的是将此字段转换为适合 BSONDateTime 的格式并让 ReactiveMongo 执行插入。
我认为是这样的:
((__ \ 'myDate).json.pickBranch(Reads.of[JsString] andKeep toDateFormat))
我该如何进行这种转变?
我有一个接收 JSON 正文的控制器。其中一个字段是表单的日期yyyy-mm-dd
。我想做的是将此字段转换为适合 BSONDateTime 的格式并让 ReactiveMongo 执行插入。
我认为是这样的:
((__ \ 'myDate).json.pickBranch(Reads.of[JsString] andKeep toDateFormat))
我该如何进行这种转变?
迈向进步的一步......我相信我可以执行以下操作将日期字符串转换为 JsNumber,然后反应式 mongo 可以处理:
((__ \ 'myDate).json.update(Reads.of[DateTime].map{ x => JsNumber(x.getMillis)}) )
事实证明,Play 有一些隐式来处理 Reads 类中的 Date 和 DateTime 对象。所以 Reads.of[DateTime] 有效。
更新:
要使其与Play-ReactiveMongo隐式 BSON 转换器一起使用,您需要使用“$date”键创建一个 JsObject,如下所示:
((__ \ 'tripDate).json.pickBranch(Reads.of[DateTime].map{ x => Json.obj("$date"->JsNumber(x.getMillis))}) )