1

我想为 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 没有正文语义:HTTP 请求方法的有效负载。所以也许通过Play 2.0没有机制来处理它是正常的。

4

2 回答 2

1

我相信您对每种类型的请求的期望感到困惑。把它们加起来:

  1. GET请求在 URL 中包含有效负载,不添加请求正文
  2. POST请求将有效负载添加到请求正文

从您发布的示例中,您似乎希望从 GET 请求中返回 Json 答案,这将更有意义。

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

于 2012-10-26T11:39:14.223 回答
0

这是一个示例问题

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")
 }
于 2018-12-13T06:09:34.877 回答