用于格式化json的案例类 - 包含和不包含对象id

时间:2013-11-14 00:14:51

标签: scala playframework-2.0 reactivemongo

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

我使用的是根据案例类和implicit val myFormat = Json.format[myCaseClass]

构建的模型

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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