Help us understand the problem. What is going on with this article?

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")
  }  
}
someone7140
まだまだ修行中のエンジニアです。ちゃんとサービスを作れるようになりたいです。
http://toaruit.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away