我在 Play 中发现了有趣的东西!框架表单验证。例如我有这样的形式:
case class Foo(mystring: String, myint: Int, mybool: Boolean) { // doing cool stuff here }
val myForm = Form(
mapping(
"mystring" -> text,
"myint" -> number,
"mybool" -> boolean
)(Foo.apply)(Foo.unapply))
当我绑定 Json 中不存在“mybool”的数据时,验证通过并创建一个带有“mybool = false”的对象。这是一种非常奇怪的行为,好像我将传递相同的数据,但没有“mystring”字段,我会得到Validation Errors: Map(mystring -> error.required)
我希望看到的——因为该字段丢失了。
如果我将布尔字段设为可选,但我手动添加了这样的检查:
"mybool" -> optional(boolean).verifying("mybool.required", _.isDefined)
并在没有字段的情况下绑定数据,我得到了预期的错误:
Validation Errors: Map(mybool -> mybool.required)
示例数据集:
{
"mystring": "stringHere",
"myint": 33
}
为什么必需的检查不适用于布尔值?最好的解决方法是什么?是剧吗!错误还是我只是不明白什么?
感谢您的回答。