0

パスワードフィールドを英数字にするかどうかをチェックする必要があり、そうでない場合はカスタムをスローします検証エラー私はプレーフレームワークを使用していますが、コンパイル時エラーを受け取りますPlayFrameworkで指定されたフィールドが英数字かどうかを確認する方法

私は私がここで必要とする理由、それはそれだ間違ってやっている私の望ましい結果をachiveすることができません
value checkAlphanumeric is not a member of 
    play.api.libs.json.Reads[String] 
    - value checkAlphanumeric is not a member of 
    play.api.libs.json.Reads[String] 

はコード

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

object UserSignUpValidation { 
    val allNumbers = """\d*""".r 
    val allLetters = """[A-Za-z]*""".r 
    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)checkAlphanumeric))(UserSignUpValidation.apply _) 
    def checkAlphanumeric(password:String)={ 
     val allNumbers = """\d*""".r 
     val allLetters = """[A-Za-z]*""".r 

     val errors = password match { 
      case allNumbers() => Seq(ValidationError("Password is all numbers")) 
      case allLetters() => Seq(ValidationError("Password is all letters")) 
      case _ => Nil 
     } 
    } 

私は、この行にエラーを取得していますです

(JsPath \ "password").read(minLength[String](8)checkAlphanumeric))(UserSignUpValidation.apply _) 

あなたはケースクラス内での検証を実行しない理由

答えて

0

あなたの問題はあなたのcheckAlphanumericメソッドの方法を使用することができないということです。あなたはおそらく欲しいのは(私は、既存の方法を使用して、チェックの実装を変更)Reads上のフィルタであるので、私は次のように何かをすることを示唆している:それは働いた

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 _) 
+0

感謝:) – swaheed

0

まあ、私は疑問に思う上記のシナリオを実装するための正しい方法は何ですか?

case class userUserSignUpValidation(firstName: String, 
             lastName: String, 
             email: String, 
             password: String) { 

    assert(!password.matches("""[A-Za-z]*""") && !password.matches("""\d*"""), "Invalid password") 
    // have other field validations here 
} 

そして、あなたで

は次のように暗黙のフォーマッタを使用しUserSignUpValidation:

object UserSignUpValidation { 
    implicit val userFormatter = JSON.format[userUserSignUpValidation] 

    // de-serialization code here 
} 
関連する問題