有効な電子メールまたは空の文字列のみを許可する読み取り用のバリデーターを作成しようとしています。電子メールの検証、またはPlay/Scalaの空の文字列で読み取る
今まで私が試したことは、部分的にしか動作していないようです。正規表現でそれをやってみました、また
diverging implicit expansion for type play.api.libs.json.Reads[V] [error] starting with value uuidReads in trait DefaultReads [error]
(__ \ "value").read[String](email or maxLength(0)).map(EmailFieldValueForm.apply _)
:
val emailFieldValueFormReads: Reads[EmailFieldValueForm] =
(__ \ "value").read[String](email or pattern("""^$"""r)).map(EmailFieldValueForm.apply)
とで
case class EmailFieldValueForm(value: String) extends FieldValueForm
val emailFieldValueFormReads: Reads[EmailFieldValueForm] =
(__ \ "value").read[String](email or maxLength(0)).map(EmailFieldValueForm.apply _)
私はそれをテストするとき、私は次のエラーを取得しています:ここに は私がdefenitionを読み込んでこのケースでは、私が提供しているjsonは通過します。例:
val invalidJson = Json.parse(
"""
|{
| "value": "boo"
|}
""".stripMargin
私に空の値を与えても、検証に失敗しません。
私は間違っていますか?
おかげで、
SOLUTION は私が正しくテストをやっていなかったように思えます。以下は、働いていた:問題がdef maxLength[M](m: Int)(implicit reads: Reads[M], p: M => scala.collection.TraversableLike[_, M])
ためimplicit reads: Reads[M]
にある
val invalidJson = Json.parse(
"""
|{
| "value": "boo"
|}
""".stripMargin
)
(EmailFieldValueForm.emailFieldValueFormReads reads invalidJson match {
case JsSuccess(value, _) => value
case JsError(e) => throw JsResultException(e)
}) must throwA[JsResultException]
これは何も変更しませんでした... –
同じエラーがありますか? –
それで、私がバリデーションメソッドを実行しているなら、それは機能します。しかし、単純な読み取りでも同様に検証することはできませんか?ポストのアップデート。 –