Как получить доступ к данным post из scala play? - программирование
Подтвердить что ты не робот

Как получить доступ к данным post из scala play?

У меня есть маршрут типа "POST". Я отправляю почтовые данные на страницу. Как получить доступ к этим данным. Например, в PHP вы используете $_POST

Как мне получить доступ к сообщениям post в scala и в режиме воспроизведения?

4b9b3361

Ответ 1

Как и в Play 2.1, есть два способа получить параметры POST:

1) Объявление тела как формы-urlencoded через параметр парсера Action, и в этом случае request.body автоматически преобразуется в Map [String, Seq [String]]:

def test = Action(parse.tolerantFormUrlEncoded) { request =>
    val paramVal = request.body.get("param").map(_.head)
}

2) Вызвав request.body.asFormUrlEncoded, чтобы получить карту [String, Seq [String]]:

def test = Action { request =>
    val paramVal = request.body.asFormUrlEncoded.get("param").map(_.head)
}

Ответ 2

Здесь у вас есть хороший пример, как это делается в Play:

https://github.com/playframework/Play20/blob/master/samples/scala/zentasks/app/controllers/Application.scala

val loginForm = Form(
  tuple(
    "email" -> text,
    "password" -> text
  ) verifying ("Invalid email or password", result => result match {
    case (email, password) => User.authenticate(email, password).isDefined
  })
)



/**
 * Handle login form submission.
 */
def authenticate = Action { implicit request =>
  loginForm.bindFromRequest.fold(
    formWithErrors => BadRequest(html.login(formWithErrors)),
    user => Redirect(routes.Projects.index).withSession("email" -> user._1)
  )
}

Это описано в документации по отправке форм

Ответ 3

как указывает @Marcus, предпочтительным является метод bindFromRequest. Однако для простых одноразовых случаев поле

<input name="foo" type="text" value="1">

можно получить доступ через следующую форму

val test = Action { implicit request =>
  val maybeFoo = request.body.get("foo") // returns an Option[String]
  maybeFoo map {_.toInt} getOrElse 0
}

Ответ 4

Здесь у вас есть хороший пример, как это делается в Play 2:

def test = Action(parse.tolerantFormUrlEncoded) { request =>
    val paramVal = request.body.get("param").map(_.head).getorElse("");
}