1

Play2初心者です。これを使用して、着信 json オブジェクトを検証および変換したいと考えています。ここに私がこれまでに持っているコードがあります。トランスフォーマーを使用してユーザー入力を検証および変換するための推奨される方法を知りたいです。また、(JsString を処理するために) 定義した email2 関数が実際に必要なのか、定義を回避する方法があるのか​​ もわかりません。

def email2(implicit reads:Reads[JsString]) : Reads[JsString] = 
pattern( """\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}\b""".r, "validate.error.email" )

def pattern(regex: => scala.util.matching.Regex, error: String = "error.pattern")(implicit reads:Reads[JsString]) =
Reads[JsString]( js => reads.reads(js).flatMap { o =>
  regex.unapplySeq(o.value).map( _ => JsSuccess(o) ).getOrElse(JsError(error))
})

val transformer = (
  (__ \ '_id).json.put(JsString(new ObjectId().toString)) and
  (__ \ 'email).json.update(__.readNullable[JsString](email2)).orElse(JsNull))
  ) reduce

request.body.transform(transformer) match {
  case JsSuccess(value:JsValue,_)=>  Async {
        collection.insert(value).map{
          case someError:LastError if someError.err.isDefined =>  Ok(Json.obj("errors"->List("Insertion failed:"+Json.prettyPrint(value))))
          case others => Ok(value)
        }
      }
  case errors:JsError => Ok(Json.obj("errors"->JsError.toFlatJson(errors)))

ここでは、オプションのフィールドとして電子メールを使用したいと考えています。フィールドが存在する場合は有効な電子メール アドレスである必要があり、フィールドが存在しない場合は null を使用する必要があります。メールが無効な場合、ユーザーにエラー メッセージを送信します。

このコードはまだコンパイルされておらず、トランスフォーマーを使用していて、ユーザー入力の検証が本当に正しい方法であるかどうかはわかりません。

4

0 に答える 0