我想为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没有机制来处理它是正常的。
答案 0 :(得分:1)
我相信你对每种类型的请求有什么期望感到困惑。总结一下:
从你发布的例子来看,似乎你想要从GET请求中返回一个Json答案,这会更有意义。
通过制作Json字符串并使用Ok(result).as("application/json")
设置响应的MIME类型,可以轻松实现这一点。
答案 1 :(得分: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")
}