2011-12-23 24 views
12

Tôi đang cố triển khai API REST với Play 2.0 (Scala) nhưng tôi bị kẹt trong phương thức POST. Làm cách nào để tải trọng tải từ đối tượng Yêu cầu? Tôi đã không tìm thấy bất kỳ tài liệu nào về nó và đã không thể tìm ra từ mã nguồn.Cách tải trọng từ POST trong Play 2.0

+0

Anh chàng này truy cập bài đăng bằng cách liên kết URL với động từ HTTP và sau đó có thể truy cập trực tiếp đối tượng của mình: http://www.jamesward.com/2011/12/11/tutorial-play-framework- jpa-json-jquery-heroku –

+0

@ user309483 Hiện tại, tôi không cần bất kỳ ràng buộc ngầm nào từ tải trọng tới đậu, dù sao, nhờ liên kết, nó có thể hữu ích :) – jglatre

Trả lời

8

Bạn sẽ có thể làm như sau:

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

Và cũng những thứ như:

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

Cảm ơn, nó hoạt động! Tôi đã đặt một 'println (request.body)' và tôi nhận được những thứ như 'AnyContent (Bản đồ (body -> WrappedArray (pepe), pepe -> WrappedArray (null)))', trông giống như một khởi đầu tốt . – jglatre

1

tôi phải làm điều đó hơi khác nhau (có lẽ tôi đang trên một phiên bản mới hơn của codebase):

javascript của tôi:

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

tuyến đường của tôi:

POST /ping controllers.Application.ping() 

tôi phương pháp điều khiển:

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

Tôi giả định này sẽ thay đổi trong phiên bản cuối cùng.

7

có một cái nhìn tại this article trên playlatam

cũng kiểm tra this question trên google danh sách

cho java (với một java_name tên param):

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

cho scala (với một scala_name tên param):

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

Cảm ơn bạn đã liên kết! – jglatre

0

H ere là những gì tôi đã làm.

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 
Các vấn đề liên quan