默认情况下,Play的JSON序列化在将JSON序列化为案例类时是宽容的。例如:
如果收到以下JSON:
case class Stuff(name: String, value: Option[Boolean])
implicit val stuffReads: Reads[Stuff] = (
( __ \ 'name).read[String] and
( __ \ 'value).readNullable[Boolean]
)(Stuff.apply _)
如果收到以下JSON:
{name: "My Stuff", value: true, extraField: "this shouldn't be here"}
如果成功,它将使用“JsSuccess”并且舍弃“extraField”。
是否有一种方法构建Json Reads函数,使其在存在“未处理”的字段时返回JsError?
case class
属性名称而不是onlyFields("name", "value")
可变参数函数?在onlyFields
方法中硬编码属性名称可以工作,但在修改case class
时遇到维护挑战,需要记住更新/添加/删除onlyFields
中的字段名称,因为onlyFields
没有编译时安全性,它只有在单元测试/运行时才能显示缺少的属性。是否有一种方法可以在编译时实现这一点? - Vikas PandyaLabelledGeneric
。我会尽力写一篇关于LabelledGeneric
的博客文章,但是我不能保证本周内能完成。 - Travis Brown