Ich möchte ein Passwort-Feld validieren, wie folgt:ist es möglich, zwei Validierungsmethoden zur Ausführung von Reads auf demselben JsPath
Überprüfen Sie zunächst, dass das Passwort nur Kleinbuchstaben hat Dann überprüfen, ob seine Länge min 8 Zeichen ist.
Ich habe die zwei Validierungscodes wie folgt geschrieben:
/*check lowercase*/
def checkPasswordCase[T]: Reads[String] = {
Reads.StringReads.filter(ValidationError("Password not in lowercase"))(str => {
(str.matches("""[a-z]+"""))
})
}
/*check length*/
def checkPasswordLength[T](min:Int): Reads[String] = {
Reads.StringReads.filter(ValidationError("Invalid password length"))(str => {
(str.length >= min)
})
}
ich den Code wie folgt aufgerufen bekam aber Kompilierungsfehler Cannot prove that String <:< String => C.
(JsPath \ "user" \ "password").read[String](checkPasswordCase)(checkPasswordLength(8)) and ...
ich versucht, mit Reads.minLength (8) aber bekam ein anderer Fehler.
Konnte ich nicht zwei Bestätigungscodes hintereinander verwenden? entweder
funktionierte nicht, leider. Erhielt eine divergierende implizite Erweiterung für den Typ play.api.libs.json.Reads [M], beginnend mit der Methode ArrayReads im Merkmal DefaultReads, wenn ich keepAnd oder keepAnd verwendete. '(JsPath \" user "\" password "). Read [String] ((checkPasswordCase) undKeep (Reads.minLength (8))) und ...' –
Dies könnte durch den redundanten '[T]' in verursacht werden Ihre Definition von 'checkPasswordCase' und' checkPasswordLength'. Diese Validatoren behandeln nur Strings, sind also nicht generisch. Versuchen Sie, nur das '[T]' zu entfernen. Alternativ können Sie den Typ explizit mit 'checkPasswordCase [String]' angeben. – Mikesname
[T] aus den Definitionen von checkPasswordCase und checkPasswordLength entfernt. Dann '(JsPath \" user "\" password "). Lese [String] ((checkPasswordCase) und Keep (checkPasswordLength (8))) und funktioniert. Vielen Dank. –