Znalazłem interesującą rzecz w Play! ramy stanowią weryfikację. Na przykład mam taką postać:Scala Zatwierdzenie formularza gry: wymagane boolean nie jest obowiązkowe
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))
Kiedy jestem wiązanie danych bez „mybool” obecny w moim JSON przechodzi walidacji i tworzy obiekt z „mybool = false”. Jest to dość dziwne zachowanie, tak jakbym przekazał te same dane, ale bez "tajemniczego" pola dostanę Validation Errors: Map(mystring -> error.required)
, którego spodziewam się zobaczyć - ponieważ brakuje pola.
Jeśli robię pole logiczna opcja, ale mam ręczne dodawanie takiego sprawdzenia:
"mybool" -> optional(boolean).verifying("mybool.required", _.isDefined)
i powiązać dane bez pola dostaję oczekiwany błąd:
Validation Errors: Map(mybool -> mybool.required)
Przykładowy zestaw danych:
{
"mystring": "stringHere",
"myint": 33
}
Dlaczego wymagane sprawdzenie nie działa dla Boolean? Jakie jest najlepsze obejście tego problemu? Czy to jest zabawa! błąd lub po prostu czegoś nie rozumiem?
Dzięki za odpowiedzi.
Dzięki za odpowiedź. Brzmi jak wyjaśnienie. Wtedy prawdopodobnie to niepoprawne, że używam formularzy do wiązania moich danych przychodzących, które pochodzą z API, a nie z formularzy HTML. Na razie zastosuję obejście z opcjonalnym sprawdzaniem boolowskim i ręcznym. – psisoyev
Jeśli spełnia większość potrzebnych informacji, nie widzę problemu z korzystaniem z Formularzy Play, niezależnie od tego, czy dane pochodzą z formularza, czy z żądania interfejsu API. Powinienem powiedzieć, że nie jestem obeznany ze Scalą, więc może istnieć jakiś wbudowany sposób robienia tego, co chcesz, ale czasami konieczne jest wykonanie własnej, niestandardowej weryfikacji. – estmatic