I have a problem with default parameters and using Play Json Read. Here is my code:
case class Test(action: String, storeResult: Option[Boolean] = Some(true), returndata: Option[Boolean] = Some(true))
val json =
"""
{"action": "Test"}"""
implicit val testReads: Reads[Test] =
(
(JsPath \\ "action").read[String](minLength[String](1)) and
(JsPath \\ "store_result").readNullable[Boolean] and
(JsPath \\ "returndata").readNullable[Boolean]
) (Test.apply _)
val js = Json.parse(json)
js.validate[Test] match {
case JsSuccess(a, _) => println(a)
case JsError(errors) =>
println("Here")
println(errors)
}
What I was hoping to get at the end is
Test("Test", Some(true), Some(true))
but I got:
Test("Test",None,None)
Why is this so? If I didn't provide parameter in the json why it didn't got default value? How to achieve what I want?
Do you really need Options in your case class if you supply default values? Without Options the following code should work
If you need Options then this code might work (not tested!)
in Play 2.6 you can write simply:
It looks as if support for default parameters is in version 2.6.
A workaround for prior versions is to do something like the following: