我正在编写一个play2应用程序,通过rest / json获取数据并使用reactivemongo将其存储在mongodb中。
我使用的是根据案例类和implicit val myFormat = Json.format[myCaseClass]
目前我有一个来自mongodb的对象案例类。它们包含_id字段,一切正常。进入的新对象自然没有这个id字段,因此Json.fromJson[myCaseClass](req.body)
验证器失败。
我是否真的必须为新对象创建另一个案例类,或者是否有更干燥和优雅的解决方案而不重复该类并删除_id?
答案 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]
能够创建包含选项的宏。