2011-12-23 11 views
12

Sto cercando di implementare un'API REST con Play 2.0 (Scala) ma mi sto bloccando nel metodo POST. Come ottengo il payload dall'oggetto Request? Non ho trovato alcuna documentazione su di esso e non sono stato in grado di capire dal codice sorgente.Come ottenere un payload da un POST in Play 2.0

+0

Questo post l'accesso ragazzo legando l'URL al verbo HTTP ed è quindi in grado di accedere direttamente suo oggetto: http://www.jamesward.com/2011/12/11/tutorial-play-framework- jpa-json-jquery-heroku –

+0

@ user309483 Al momento, non ho bisogno di alcun legame implicito dal carico utile ai fagioli, comunque, grazie per il collegamento, potrebbe essere utile :) – jglatre

risposta

8

Si dovrebbe essere in grado di fare le seguenti:

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

E anche le cose come:

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

Grazie, funziona! Ho messo un 'println (request.body)' e sto ottenendo cose come 'AnyContent (Map (body -> WrappedArray (pepe), pepe -> WrappedArray (null))', che sembra un buon inizio . – jglatre

1

ho dovuto farlo un po 'diverso (forse sono su una versione più recente del codebase):

mio javascript:

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

il mio percorso:

POST /ping controllers.Application.ping() 

Il mio metodo di controllo:

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

Presumo che ciò cambierà nella versione finale.

7

uno sguardo al this article su playlatam

controllare anche this question su google lista

per Java (con un java_name nomi param):

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

per Scala (con uno scala_name nomi param):

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

Grazie per i collegamenti! – jglatre

0

H ecco cosa ho fatto

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 
Problemi correlati