Posted at

Play Framework(Scala)で、POSTされたデータを直接requestから取得する

More than 1 year has passed since last update.


概要

以前に私の方で投稿した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")
}
}