概要
以前に私の方で投稿したPlay Framework 2.6(Scala)でFormの処理を作ってみたでは、Formオブジェクトを使ってPOSTのデータを取得していましたが、reuqestから直接POSTされたデータを取得する方法を紹介します。
対応方法
How to get payload from a POST in Play 2.0で紹介されている通り、requestのbodyから「asFormUrlEncoded」を使うことで取得できます。JavaでのサンプルはHyuさんのPlayFrameworkでのリクエストパラメーターの受け取り方でも紹介されています。
サンプルコード
Formオブジェクトを使わない方法で、POSTされたデータを取得するScalaのサンプルソースを記載します。
sample.scala.html
@import helper._
@main("サンプル"){
<font size=5>■サンプル画面</font><br/>
@helper.form( action = helper.CSRF(routes.SampleController.sampleAction) ){
<input type = "hidden" name = "idParam" value="test" />
<input type = "submit" value="送信する">
}
}
SampleController.scala
package controllers
import javax.inject._
import play.api._
import play.api.mvc._
import play.api.data._
import play.api.i18n.I18nSupport
import play.api.i18n._
@Singleton
class SampleController @Inject()(cc: ControllerComponents ) extends AbstractController(cc) with I18nSupport {
def sampleAction() = Action { implicit request: Request[AnyContent] =>
// リクエストから直接POSTされたデータ取得
val idParam = request.body.asFormUrlEncoded.get("idParam")(0)
Redirect("./test")
}
}