2012-10-22 62 views
1

我想使一個GET請求處理器/控制器,如在ElasticSearch:如何處理JSON有效載荷在用GET請求播放2.0 +斯卡拉

$ curl -XGET 'http://localhost:9200/twitter/tweet/_search?routing=kimchy' -d '{ 
"query": { 
    "filtered" : { 
     "query" : { 
      "query_string" : { 
       "query" : "some query string here" 
      } 
     }, 
     "filter" : { 
      "term" : { "user" : "kimchy" } 
     } 
    } 
}} 

我從http://www.playframework.org/documentation/2.0.4/ScalaJsonRequests閱讀文檔,但本實用新型基於在POST請求。我已經嘗試過,看起來我可以通過POST請求訪問正文請求。但是,當我嘗試使用GET請求時,我的request.body是AnyContentAsEmpty。

有沒有辦法在Play 2.0中處理這個請求中的json?


我看到GET沒有身體語義:Payloads of HTTP Request Methods。 因此,通過Play 2.0無法處理它是很正常的。

回答

1

我相信你對你對每種請求的期望會感到困惑。概括起來:

  1. GET請求包含有效載荷的URL,沒有請求主體是 添加
  2. POST請求負載添加到請求體

從你發佈的例子似乎是你想要從GET請求中返回一個Json答案,這會更有意義。

這可以通過製作Json字符串並使用Ok(result).as("application/json")來設置響應的MIME類型來輕鬆實現。

+0

謝謝你的回答,但我想我沒有很好地解釋我的問題。我不想創建一個返回json的處理程序。我想創建一個可以從GET請求讀取json的處理程序。我的例子是elasticsearch和curl的基本例子。用json執行GET(從curl -XGET)請求到elasticsearch服務器。然後elasticsearch服務器返回搜索的json結果。也許我不明白在這種情況下curl cmd是如何工作的。我的猜測是,-d強制使用POST的請求:_-d將POST請求中的指定數據發送到HTTP服務器_ – alexgindre

+0

正如我在本文中所說的,關於此[鏈接](http:// stackoverflow。 com/questions/978061/http-get-with-request-body)和這個[link](http://stackoverflow.com/questions/5905916/payloads-of-http-request-methods)似乎可以發送請求GET請求中的主體。因此,強烈建議避免這種事情。我錯了嗎 ? – alexgindre

+0

@alexgindre是的,GET使用URL,POST正文。使用-d您正在執行POST請求,通過GET發送json可以通過編碼並將其添加爲參數來完成,但我相信這不是一個好選擇,更好使用POST。 –

相關問題