12

我正在尝试使用 Play 2.0 (Scala) 实现 REST API,但我陷入了 POST 方法。如何从 Request 对象中获取有效负载?我没有找到任何关于它的文档,也无法从源代码中弄清楚。

4

4 回答 4

8

您应该能够执行以下操作:

def index = Action { request =>
  val body = request.body
}

还有类似的东西:

def index = Action { request =>
  val name = request.queryString.get("name").flatMap(_.headOption)
  Ok("Hello " + name.getOrElse("Guest"))
}
于 2011-12-23T21:37:33.410 回答
8

看看这篇关于playlatam的文章

也在谷歌列表上检查这个问题

对于 java(带有参数名称 java_name):

String name = request().body().asFormUrlEncoded().get("java_name")[0];

对于 scala(带有参数名称 scala_name):

def name = request.body.asFormUrlEncoded.get("scala_name")(0)
于 2012-05-21T00:11:36.630 回答
2

我不得不做一些不同的事情(也许我使用的是更新版本的代码库):

我的JavaScript:

$(document).ready(function(){
  $.post( "/ping", {one: "one", two: "two" },
    function( data ){
      console.log(data); //returns {"one":"one","two":"two"}
    })
});

我的路线:

POST /ping controllers.Application.ping()

我的控制器方法:

def ping() = Action{ request =>

  val map : Map[String,Seq[String]] = request.body.asFormUrlEncoded.getOrElse(Map())

  val one : Seq[String] = map.getOrElse("one", List[String]())
  val two : Seq[String] = map.getOrElse("two", List[String]())

  Ok( 
    toJson( JsObject(List( "one"->JsString(one.first), "two"->JsString(two.first))))
  )
}

我认为这将在最终版本中改变。

于 2012-02-10T21:40:32.483 回答
0

这就是我所做的。

val map : Map[String,Seq[String]] = request.body
val seq1 : Seq[String] = map.getOrElse("socket_id", Seq[String]())
val seq2 : Seq[String] = map.getOrElse("channel_name", Seq[String]())
val socketId = seq1.head
val channelName = seq2.head
于 2013-12-14T21:03:31.387 回答