Я пытаюсь реализовать REST API с Play 2.0 (Scala), но я застрял в методе POST. Как получить полезную нагрузку из объекта Request? Я не нашел документацию об этом и не смог найти исходный код.
Как получить полезную нагрузку с POST в Play 2.0
Ответ 1
Вы должны быть в состоянии сделать следующее:
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"))
}
Ответ 2
посмотрите эту статью на playlatam
также проверьте этот вопрос в списке google
для java (с именами параметров java_name):
String name = request().body().asFormUrlEncoded().get("java_name")[0];
для scala (с именами параметров scala_name):
def name = request.body.asFormUrlEncoded.get("scala_name")(0)
Ответ 3
Мне пришлось сделать это несколько иначе (возможно, я нахожусь в более новой версии кода):
мой 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))))
)
}
Я предполагаю, что это изменится в окончательной версии.
Ответ 4
Вот что я сделал.
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