LoginSignup
0
0

More than 5 years have passed since last update.

[Playframework]FilterでPOSTデータが受け取れない

Last updated at Posted at 2016-07-29

PlayframeworkのFilterでPOSTデータが受け取ることができない

FilterでPOSTデータを取り出したかったが、うまく取り出すことができなかったのでソースコードを見ながら調べてみた。

原因はForm.bindFromRequestの引数がplay.api.mvc.Request[]であること。
play.api.data.Form.bindFromRequest
Filterの引数となっているRequestHeaderではリクエストボディを見ることができない。
play.api.mvc.RequestHeader
Request[]の初期化にRequestHeaderとbodyを渡しているよう。
play.api.mvc.Request

対応策

ActionBuilderを拡張してPOSTデータを受け取って処理を行うようにし、各Controllerで使用するようにした。


object ActionTest extends ActionBuilder[Request] {
  val testForm = Form("test" -> text)
  def invokeBlockA: Future[Result] = {
    if (testForm.bindFromRequest.value.isDefined) {
      block(request)
    } else {
      Future.successful(Ok("error"))
    }
  }
}

上記対応を行ってもうまくいかない場合はRequestHeaderのcontent-typeを確認し、下記関数内でどのように扱われているのか確認すべし。
play.api.mvc.ContentTypes.anyContent
content-typeを明記しておらず、AnyContentAsRawとして処理されていたためPOSTデータを受け取れない場合があった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0