2

我正在编写一个 play2 应用程序,它通过rest/json 获取数据并使用reactivemongo 将其存储在mongodb 中。

我正在使用从案例类构建的模型和implicit val myFormat = Json.format[myCaseClass]

目前我有一个来自 mongodb 的对象的案例类。它们包含 _id 字段,一切正常。进来的新对象自然没有这个 id 字段,因此Json.fromJson[myCaseClass](req.body)验证器失败。

我真的必须为新对象创建另一个案例类,还是有一个更干燥和优雅的解决方案而不复制类和删除_id?

4

2 回答 2

0

我会使用解析器组合器 API 并创建一个 json 格式,或者甚至可能只是一个 Reads[T],它处理传入的可能没有 id 的字段。就像是:

implicit val readsMyClass: Reads[MyClass] = (
  (__ \ "id").readNullable[Id] and
  (__ \ "someProperty").read[String]
)(create _)

def create(maybeId: Option[Id], someProperty: String) = 
   MyClass(maybeId.getOrElse(...generate id...), someProperty)

有关更多信息,请参阅文档:http ://www.playframework.com/documentation/2.2.x/ScalaJsonCombinators

于 2013-11-14T12:33:26.627 回答
0

我遵循了建议并_id: Option[BSONObjectID]成功了。没有必要实现阅读器,因为implicit val userFormat = Json.format[User]能够创建包含选项的宏。

于 2013-11-14T14:26:49.043 回答