我正在使用Scala编写Play 2.3.2应用程序。 在我的控制器中,我有一个从请求中获取json对象的方法。 实现如下:
def firstTags = Action.async { request =>
def elaborate(n: Int): Future[Result] = {//some implementation}
//get the json Object
val jsonObject = request.body.asJson
//parse the json object
jsonObject match {
case Some(json) => json \ "number" match {
case x: JsNumber => elaborate(x.as[Int])
case _ => Future{BadRequest}
}
case None => Future{BadRequest("Need a Json")}
}
}
在我的路线档案中,我有:
GET /recommendation/statistic/first @recommendationsystem.controllers.manager.StatisticsController.firstTags
当我尝试用curl调用方法时,我总是得到一个"需要一个Json"响应。 我用curl调用我的服务器,如下所示:
curl -H "Accept: application/json" -H "Content-Type: application/json" -d '{"number": 3}' -X GET http://localhost:9000/recommendation/statistic/first
出了什么问题?
答案 0 :(得分:2)
GET不应该有身体。看看HTTP GET with request body。 POST方法不仅用于修改服务器状态,还用于处理数据 来自RFC 2616 - HTTP/1.1:
POST方法用于请求源服务器接受 请求中包含的实体作为资源的新下属 由请求行中的Request-URI标识。 POST是专门设计的 允许统一的方法来涵盖以下功能:
现有资源的注释;
向公告栏,新闻组,邮件列表发送消息, 或类似的一组文章;
提供一个数据块,例如提交的结果 形式,数据处理过程;
通过追加操作扩展数据库。
POST方法执行的实际功能由 服务器并且通常依赖于Request-URI。 [...]