我有一个用例,我需要接受空值,但不要缺少属性。 这是在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?
答案 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)