我正在使用PlayJson执行JSON到案例类的标准映射。如果验证成功,我想转换映射到成员Test.foo
的值。是否可以将其用于Reads转换器的定义?
val json = .....
case class Test(foo:String, bar:String)
val readsTest: Reads[Test] = (
(__ \ "foo").read[String](minLength(5)) and // And I want to transform this value if the validation succeeds
(__ \ "bar").read[String](minLength(10))
)(Test.apply _)
json.validate[Test] match {
case s: JsSuccess[Test] => s.get
case e: JsError => false
}
Reads.map
可以做到这一点,例如,我们要反转Reads.map
字段的值,那么我们可以像这样调用foo
上的.map(v => v.reverse)
Reads
这是一个可行的示例
(__ \ "foo").read[String](minLength[String](5)).map(v => v.reverse)
输出
val json =
"""
|{
| "foo": "abcdefghijkl",
| "bar": "012345678910"
|}
|""".stripMargin
case class Test(foo: String, bar: String)
val readsTest: Reads[Test] = (
(__ \ "foo").read[String](minLength[String](5)).map(v => v.reverse)
(__ \ "bar").read[String](minLength[String](10))
)(Test.apply _)
Json.parse(json).validate[Test](readsTest)