2011-12-23 12 views
12

Próbuję zaimplementować interfejs REST API z Play 2.0 (Scala), ale utknąłem w metodzie POST. Jak uzyskać ładunek z obiektu żądania? Nie znalazłem żadnej dokumentacji na ten temat i nie byłem w stanie zrozumieć kodu źródłowego.Jak uzyskać ładunek z testu POST w wersji Play 2.0

+0

Dostęp ten facet post przez wiązanie URL do czasownika HTTP i jest wtedy w stanie uzyskać dostęp do swojego obiektu bezpośrednio: http://www.jamesward.com/2011/12/11/tutorial-play-framework- jpa-json-jquery-heroku –

+0

@ user309483 W tej chwili nie potrzebuję żadnego niejawnego powiązania z ładunkiem do fasoli, w każdym razie, dzięki za link, może być użyteczny :) – jglatre

Odpowiedz

8

Powinieneś być w stanie wykonać następujące czynności:

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

a także takie rzeczy jak:

def index = Action { request => 
    val name = request.queryString.get("name").flatMap(_.headOption) 
    Ok("Hello " + name.getOrElse("Guest")) 
} 
+0

Dzięki, działa! Umieściłem 'println (request.body)' i otrzymuję takie rzeczy jak AnyContent (Map (body -> WrappedArray (pepe), pepe -> WrappedArray (null))), które wygląda na dobry początek . – jglatre

1

musiałem zrobić to nieco inaczej (może jestem na nowszą wersję codebase):

mój javascript:

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

moja droga:

POST /ping controllers.Application.ping() 

Moja metoda kontroler:

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)))) 
) 
} 

Zakładam ten zmieni się w ostatecznej wersji.

7

spojrzeć this article na playlatam

również sprawdzić this question na liście google

for Java (z nazwami param java_name):

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

do Scala (z nazwami param scala_name):

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

Dzięki za linki! – jglatre

0

H Oto, co zrobiłem.

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 
Powiązane problemy