我正在尝试使用Play 2.0(Scala)实现REST API,但我陷入了POST方法。如何从Request对象获取有效负载?我没有找到任何关于它的文档,也无法从源代码中找到答案。
答案 0 :(得分: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"))
}
答案 1 :(得分:8)
还要检查Google列表中的this question
for java(param names java_name):
String name = request().body().asFormUrlEncoded().get("java_name")[0];
表示scala(使用param名称为scala_name):
def name = request.body.asFormUrlEncoded.get("scala_name")(0)
答案 2 :(得分: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))))
)
}
我认为这将在最终版本中发生变化。
答案 3 :(得分: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