2011-12-23 4 views
12

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

+0

Этот парень после доступа путем связывания URL с глаголом HTTP и затем может получить доступ к его объекту непосредственно: http://www.jamesward.com/2011/12/11/tutorial-play-framework- jpa-json-jquery-heroku –

+0

@ user309483 На данный момент мне не нужно какое-либо неявное связывание с полезной нагрузкой на bean-компоненты, в любом случае спасибо за ссылку, это может быть полезно :) – jglatre

ответ

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")) 
} 
+0

Спасибо, это работает! Я поставил 'println (request.body)', и я получаю такие вещи, как 'AnyContent (Map (body -> WrappedArray (pepe), pepe -> WrappedArray (null)))', который выглядит как хороший старт , – jglatre

1

Я должен был сделать это несколько по-другому (возможно, я на более новую версию кодовая):

мой 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)))) 
) 
} 

Я предполагаю, что это изменится в окончательном варианте.

7

посмотреть на this article на playlatam

также проверить this question в списке Google

для Java (с java_name имен Param):

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

для Скале (с scala_name именами Param):

def name = request.body.asFormUrlEncoded.get("scala_name")(0) 
+0

Спасибо за ссылки! – jglatre

0

H Это то, что я сделал.

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 
Смежные вопросы