0

Ich benutze play liest Validierungshelfer ich möchte einige benutzerdefinierte Nachricht im Falle von Json Ausnahme zb anzeigen: Länge ist Minimum dann angegeben oder die angegebene E-Mail ist ungültig, ich weiß spielen Nachricht zeigt die Fehler wie diese error.minLength, aber ich mag eine angemessene Meldung angezeigt werden, wie bitte geben Sie hier das Zeichen größer als 1 (oder etwas) mein CodeWie man benutzerdefinierte ValidationError in Json einfügt Liest in PlayFramework

case class DirectUserSignUpValidation(firstName: String, 
             lastName: String, 
             email: String, 
             password: String) extends Serializable 

object DirectUserSignUpValidation { 
    var validationErrorMsg="" 
    implicit val readDirectUser: Reads[DirectUserSignUpValidation] = (
    (JsPath \ "firstName").read(minLength[String](1)) and 
    (JsPath \ "lastName").read(minLength[String](1)) and 
    (JsPath \ "email").read(email) and 
    (JsPath \ "password").read(minLength[String](8). 
     filterNot(ValidationError("Password is all numbers"))(_.forall(_.isDigit)). 
     filterNot(ValidationError("Password is all letters"))(_.forall(_.isLetter)) 
    )) (UserSignUpValidation.apply _) 
} 

ich versucht habe ValidationError wie diese

(JsPath \ "email").read(email,Seq(ValidationError("email address not correct")) and 
    but its giving me compile time error 


    too many arguments for method read: (t: T)play.api.libs.json.Reads[T] 
hinzufügen

bitte helo wie kann ich benutzerdefinierte validationError Nachrichten beim Lesen von JSON-Daten hinzufügen

+0

'' 'JsPath.read''' funktioniert nicht wie HTML Form Validierung Argumente. Sie haben diese Frage auf [link] (https://stackoverflow.com/questions/44202056/how-to-add-alphanumeric-field-in-play-framework/44221781#44221781) gestellt. Es wäre nett, wenn Sie das lesen würden Antwort auf Fragen, die Sie stellen ... – shayan

Antwort

1

Es gibt nicht so etwas wie (JsPath \ "firstName").read(minLength[String](1)) im Spiel json. was Sie mit benutzerdefinierten Fehlermeldung tun können, ist dies:

+0

Eigentlich können Sie '(JsPath \" firstName "). read (minLength [String] (1))' (obwohl ich auch seltsam finde, dass die 'String' Typ Parameter ist nicht gegeben zu "lesen"). Es gibt nur die benutzerdefinierte Fehlermeldung nicht. –

+0

@CyrilleCorpet '' '(JsPath \" firstName "). Read [T] (t: T)' '' gibt nur das angegebene Argument zurück, ohne Validierung. Zweck ist nicht die Validierung, sondern die Zuweisung eines konstanten Wertes. wie zum Beispiel '' '(JsPath \ firstName) .lesen (" John ")' '' – shayan

+1

das ist nicht die Methode, von der ich spreche. Eher '(JsPath \" Vorname "). Lesen [T] (t: Liest [T]): Liest [T]'. 'minLength [String] (1)' (für die ich in meiner Antwort Signatur und Implementierung angegeben habe) ist ein 'Reads [String] 'mit minimaler Größe. –

2

ValidationError Nachrichten sollen Schlüssel für die Übersetzung, nicht für Menschen lesbare Nachrichten verwendet werden. Wenn Sie jedoch die Nachricht für minLength ändern möchten, müssen Sie sie erneut implementieren, da sie fest codiert ist.

Zum Glück der Quellcode verfügbar ist, so können Sie es leicht, wie Sie ändern Sie bitte:

def minLength[M](m: Int)(implicit reads: Reads[M], p: M => scala.collection.TraversableLike[_, M]) = 
    filterNot[M](JsonValidationError("error.minLength", m))(_.size < m) 

Wenn Sie ein allgemeineres Muster verwenden möchten, um Fehler zu spezifizieren, der einzige Zugang Sie haben, ist die Verwendung von Ergebnis aus Ihrer Validierung. Zum Beispiel könnten Sie

val json: JsValue = ??? 
json.validate[DirectUserSignUpValidation] match { 
    case JsSuccess(dusuv, _) => doSomethingWith(dusuv) 
    case JsError(errs) => doSomethingWithErrors(errs) 
} 

Oder mit einem kompakteren Ansatz tun

json.validate[DirectUserSignUpValidation]. 
    fold(doSomethingWithErrors, doSomethingWith)