0

Play 2.3 で POST からペイロードを取得しようとしています。

だから私はこの表現を使います。

val name = request.body.asFormUrlEncoded.get("name").flatMap(_.headOption)

しかし、フィールド「名前」が存在しない場合、問題が発生します。デバッガーを使用すると、request.body.asFormUrlEncodedのタイプが Some(Map) または ListMap であることがわかります。わかりませんが、デバッガーでは両方の用語が表示されます。フィールド「name」が存在する場合は問題ありませんが、フィールド「name」が存在しない場合は NoSuchElementException がスローされます。

request.body.asFormUrlEncoded.get("name")を呼び出すだけで ArrayBuffer が返されることがわかります。しかし、「名前」フィールドが存在しない場合、 Some(ArrayBuffer) と None を返すべきではありませんか?

では、フィールドが欠落している場合に例外を生成せずにフィールドの値を照会するにはどうすればよいでしょうか。

追加: AnyContentAsFormUrlEncoded の宣言は次のとおりです。というわけでマップです。ただし、 get on Map は Some または None を返す必要がありますが、オブジェクトを直接返す必要はありません。

case class AnyContentAsFormUrlEncoded(data: Map[String, Seq[String]]) extends AnyContent
4

1 に答える 1