我在play scala中有一个等效的以下模型:
case class Foo(id:Int,value:String)
object Foo{
import play.api.libs.json.Json
implicit val fooFormats = Json.format[Foo]
}
Run Code Online (Sandbox Code Playgroud)
对于以下Foo实例
Foo(1, "foo")
Run Code Online (Sandbox Code Playgroud)
我会得到以下JSON文档:
{"id":1, "value": "foo"}
Run Code Online (Sandbox Code Playgroud)
此JSON是持久存储的,并从数据存储区读取.现在我的要求已经改变了,我需要为Foo添加一个属性.该属性具有默认值:
case class Foo(id:String,value:String, status:String="pending")
Run Code Online (Sandbox Code Playgroud)
写入JSON不是问题:
{"id":1, "value": "foo", "status":"pending"}
Run Code Online (Sandbox Code Playgroud)
但是从它读取会产生一个JsError,错过了"/ status"路径.
如何以最小的噪音提供默认值?
(ps:我有一个答案,我将在下面发布,但我对此并不满意,并且会赞成并接受任何更好的选择)