Подтвердить что ты не робот

Как получить полезную нагрузку с POST в Play 2.0

Я пытаюсь реализовать REST API с Play 2.0 (Scala), но я застрял в методе POST. Как получить полезную нагрузку из объекта Request? Я не нашел документацию об этом и не смог найти исходный код.

4b9b3361

Ответ 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