2011-12-23 2 views
12

J'essaie d'implémenter une API REST avec Play 2.0 (Scala) mais je suis coincé dans la méthode POST. Comment puis-je obtenir la charge utile de l'objet Demande? Je n'ai trouvé aucune documentation à ce sujet et j'ai été incapable de comprendre à partir du code source.Comment obtenir la charge utile d'un POST dans Play 2.0

+0

Ce poste d'accès type en liant l'URL du verbe HTTP et est alors en mesure d'accéder à son objet directement: http://www.jamesward.com/2011/12/11/tutorial-play-framework- jpa-json-jquery-heroku –

+0

@ user309483 Pour l'instant, je n'ai pas besoin de liaison implicite de la charge utile aux beans, de toute façon, merci pour le lien, ça peut être utile :) – jglatre

Répondre

8

Vous devriez pouvoir effectuer les opérations suivantes:

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

Et aussi des choses comme:

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

Merci, ça marche! J'ai mis un 'println (request.body)' et je reçois des choses comme 'AnyContent (Carte (corps -> WrappedArray (pepe), pepe -> WrappedArray (null)))', qui semble être un bon début . – jglatre

1

je devais le faire un peu différemment (peut-être que je suis sur une version plus récente du codebase):

mon javascript:

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

ma route:

POST /ping controllers.Application.ping() 

Ma méthode de commande:

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

Je suppose que cela va changer dans la version finale.

7

un coup d'oeil à this article sur playlatam

vérifier également this question sur la liste google

pour java (avec un nom de param java_name):

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

pour scala (avec un nom de param scala_name):

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

Merci pour les liens! – jglatre

0

H C'est ce que j'ai fait.

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 
Questions connexes