为什么 JsError 转换为默认的 JsSuccess?
why is JsError converted to JsSuccess of default?
我正在使用 Play-Json 2.6.3 WithDefaultValues
如下
implicit def jsonFormatFoo = Json.using[Json.WithDefaultValues].format[Foo]
implicit def jsonFormatBar = Json.using[Json.WithDefaultValues].format[Bar]
但它给出了意想不到的行为:
case class Bar(name:String)
case class Foo(bars: List[Bars] = List.empty)
现在如果我这样做
val result = Json.parse("""{"bars":[{"name":null}]}""").validate[Foo]
println(result)
我得到 JsSuccess(Foo(List()),)
。我期待 JsError(List((/bars(0)/name,List(JsonValidationError(List(error.expected.jsstring),WrappedArray())))))
只有在我删除默认 List.empty
.
后才会出现
如果我有默认值,为什么JsError会转换为默认值的JsSuccess?它有点不直观。我该如何解决?
从 Play-JSON 2.6.8 版本开始有一些变化。如果您切换到它或更高版本,那么它应该开始抱怨 Bar 的 null
值:
libraryDependencies += "com.typesafe.play" %% "play-json" % "2.6.8"
@ import play.api.libs.json._
import play.api.libs.json._
@ case class Bar(name:String)
defined class Bar
@ case class Foo(bars: List[Bar] = List.empty)
defined class Foo
@ implicit def jsonFormatBar = Json.using[Json.WithDefaultValues].format[Bar]
defined function jsonFormatBar
@ implicit def jsonFormatFoo = Json.using[Json.WithDefaultValues].format[Foo]
defined function jsonFormatFoo
@ Json.parse("""{"bars":[{"name":null}]}""").validate[Foo]
res6: JsResult[Foo] = JsError(List((JsPath(List(KeyPathNode("bars"), IdxPathNode(0), KeyPathNode("name"))), List(JsonValidationError(List("error.expected.jsstring"), WrappedArray())))))
我正在使用 Play-Json 2.6.3 WithDefaultValues
如下
implicit def jsonFormatFoo = Json.using[Json.WithDefaultValues].format[Foo]
implicit def jsonFormatBar = Json.using[Json.WithDefaultValues].format[Bar]
但它给出了意想不到的行为:
case class Bar(name:String)
case class Foo(bars: List[Bars] = List.empty)
现在如果我这样做
val result = Json.parse("""{"bars":[{"name":null}]}""").validate[Foo]
println(result)
我得到 JsSuccess(Foo(List()),)
。我期待 JsError(List((/bars(0)/name,List(JsonValidationError(List(error.expected.jsstring),WrappedArray())))))
只有在我删除默认 List.empty
.
如果我有默认值,为什么JsError会转换为默认值的JsSuccess?它有点不直观。我该如何解决?
从 Play-JSON 2.6.8 版本开始有一些变化。如果您切换到它或更高版本,那么它应该开始抱怨 Bar 的 null
值:
libraryDependencies += "com.typesafe.play" %% "play-json" % "2.6.8"
@ import play.api.libs.json._
import play.api.libs.json._
@ case class Bar(name:String)
defined class Bar
@ case class Foo(bars: List[Bar] = List.empty)
defined class Foo
@ implicit def jsonFormatBar = Json.using[Json.WithDefaultValues].format[Bar]
defined function jsonFormatBar
@ implicit def jsonFormatFoo = Json.using[Json.WithDefaultValues].format[Foo]
defined function jsonFormatFoo
@ Json.parse("""{"bars":[{"name":null}]}""").validate[Foo]
res6: JsResult[Foo] = JsError(List((JsPath(List(KeyPathNode("bars"), IdxPathNode(0), KeyPathNode("name"))), List(JsonValidationError(List("error.expected.jsstring"), WrappedArray())))))