2011-12-23 22 views
12

Estoy tratando de implementar una API REST con Play 2.0 (Scala) pero me estoy quedando atrapado en el método POST. ¿Cómo obtengo la carga del objeto Solicitud? No he encontrado ninguna documentación al respecto y no he podido descifrar el código fuente.Cómo obtener la carga de un POST en Play 2.0

+0

Este acceso chico mensaje por la unión de la URL con el verbo HTTP y es entonces capaz de acceder a su objeto directamente: http://www.jamesward.com/2011/12/11/tutorial-play-framework- jpa-json-jquery-heroku –

+0

@ user309483 Por el momento, no necesito ningún enlace implícito de la carga a los frijoles, de todos modos, gracias por el enlace, puede ser útil :) – jglatre

Respuesta

8

Usted debe ser capaz de hacer los siguientes:

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

Y también cosas como:

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

¡Gracias, funciona! He puesto un 'println (request.body)' y estoy obteniendo cosas como 'AnyContent (Map (body -> WrappedArray (pepe), pepe -> WrappedArray (null)))', que parece un buen comienzo . – jglatre

1

tuviera que hacerlo de manera algo diferente (tal vez estoy en una versión más reciente del código base):

mi javascript:

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

mi ruta:

POST /ping controllers.Application.ping() 

Mi método controlador:

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

supongo que esto cambiará en la versión final.

7

echar un vistazo a this article en playlatam

también comprobar this question en Google lista

para Java (con una java_name nombres param):

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

de Scala (con un scala_name nombres param):

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

¡Gracias por los enlaces! – jglatre

0

H ere es lo que hice.

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