如何在GET请求Play 2.0 + Scala中处理json有效负载

时间:2012-10-22 14:47:06

标签: scala playframework-2.0

我想为GET请求创建一个处理程序/控制器,例如ElasticSearch:

$ 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没有机制来处理它是正常的。

2 个答案:

答案 0 :(得分:1)

我相信你对每种类型的请求有什么期望感到困惑。总结一下:

  1. GET 请求包含URL中的有效内容,没有请求正文 添加
  2. POST 请求将有效负载添加到请求正文
  3. 从你发布的例子来看,似乎你想要从GET请求中返回一个Json答案,这会更有意义。

    通过制作Json字符串并使用Ok(result).as("application/json")设置响应的MIME类型,可以轻松实现这一点。

答案 1 :(得分:0)

this is a sample question

Play的默认主体解析器遵循HTTP规范,并忽略GET,DELETE,HEAD和OPTIONS方法的消息主体。如果要强制它解析正文,则可以通过显式传递正文解析器来实现,例如:

 def delete = Action(parse.json) { implicit request =>
   val json = request.body
   val someProp = (json \ "someprop").as[String]
   Ok(s"Prop is: $someProp")
 }