5
我发现Play中有趣的事情!框架形成验证。例如,我有这样的形式:Scala 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))
当我没有“mybool”存在于我的JSON,验证通过结合数据,并创建以“mybool =假”的对象。这是非常奇怪的行为,就好像我会传递相同的数据,但没有“mystring”字段,我会得到Validation Errors: Map(mystring -> error.required)
,我期望看到 - 因为字段丢失。
如果我做布尔场可选的,但是我手工添加这样的检查:
"mybool" -> optional(boolean).verifying("mybool.required", _.isDefined)
并绑定数据,而我得到的预期错误的领域:
Validation Errors: Map(mybool -> mybool.required)
示例数据集:
{
"mystring": "stringHere",
"myint": 33
}
为什么必需的检查不适用于布尔?什么是最好的解决方法?这是一个戏剧!错误或我只是不明白的东西?
感谢您的回答。
感谢您的回答。听起来像一个解释。那么可能这是不正确的,我使用表单来绑定我的传入数据,它来自API,而不是来自HTML表单。现在我将使用可选布尔值和手动检查的解决方法。 – psisoyev
如果它确实需要大部分内容,那么无论数据来自表单提交还是作为API请求,我都会发现使用Play的表单没有问题。我应该说我对Scala并不熟悉,所以可能有一些内置的方法来做你想做的事情,但有时候需要做自己的定制验证。 – estmatic