播放斯卡拉杰森失踪物业vs Null

时间:2013-08-22 17:40:46

标签: scala playframework playframework-2.0 playframework-2.1

我有一个用例,我需要接受空值,但不要缺少属性。 这是在Play Framework 2.1.3

例如:

case class Foo(a: Option[String], b: Option[String], c: Option[String])

此案例类可以是更大案例类的一部分

我想接受以下内容并生成foo对象:

{
   "foo" : {
        "a" : "blah",
        "b" : null,
        "c" : "blah"
    }
}

但不是这样:

{
   "foo" : {
        "a" : "blah",
        "c" : "blah"
    }
}

目前,我有以下内容将JSON读入案例类:

val FooReader = (
    (__ \ "a").readNullable[Setting] and
    (__ \ "b").readNullable[String] and
    (__ \ "c").readNullable[String])(Foo)

如何让FooReader在缺少的属性上生成JsError但允许null?

1 个答案:

答案 0 :(得分:5)

您可以使用以下内容:

val FooReader = (
  (__ \ "a").readNullable[String] and
  (__ \ "b").read(Reads.optionNoError[String]) and
  (__ \ "c").readNullable[String]
)(Foo)

如果缺少'(__ \“b”)','Reads.optionNoError [String]'将产生JsError。

您实际上可以执行以下操作:

val FooReader = (
  (__ \ "a").read(Reads.optionNoError[String]) and
  (__ \ "b").read(Reads.optionNoError[String]) and
  (__ \ "c").read(Reads.optionNoError[String])
)(Foo)