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