NoJson在播放2.3.2的http请求中找到

时间:2014-10-07 13:25:32

标签: json scala http curl playframework

我正在使用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

出了什么问题?

1 个答案:

答案 0 :(得分:2)

GET不应该有身体。看看HTTP GET with request body。 POST方法不仅用于修改服务器状态,还用于处理数据 来自RFC 2616 - HTTP/1.1

  

POST方法用于请求源服务器接受   请求中包含的实体作为资源的新下属   由请求行中的Request-URI标识。 POST是专门设计的   允许统一的方法来涵盖以下功能:

     
      
  • 现有资源的注释;

  •   
  • 向公告栏,新闻组,邮件列表发送消息,      或类似的一组文章;

  •   
  • 提供一个数据块,例如提交的结果      形式,数据处理过程;

  •   
  • 通过追加操作扩展数据库。

  •   
     

POST方法执行的实际功能由   服务器并且通常依赖于Request-URI。 [...]