0

i'm writing a Play 2.3.2 application using Scala. In my controller i had a method which get the json object from the request. The implementation is like the following:

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")}
       }
     }

In my route files i had:

 GET /recommendation/statistic/first @recommendationsystem.controllers.manager.StatisticsController.firstTags

When i try to call the method with the curl i get always a "Need a Json" response. I call my server with curl like the following:

curl -H "Accept: application/json" -H "Content-Type: application/json" -d '{"number": 3}' -X GET http://localhost:9000/recommendation/statistic/first

What's wrong??

alberto adami
  • 699
  • 1
  • 6
  • 24

1 Answers1

2

GET shouldn't have body. look at HTTP GET with request body. POST method is not only for modify the server state, but also to process data.
From RFC 2616 - HTTP/1.1:

The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line. POST is designed to allow a uniform method to cover the following functions:

  • Annotation of existing resources;

  • Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles;

  • Providing a block of data, such as the result of submitting a form, to a data-handling process;

  • Extending a database through an append operation.

The actual function performed by the POST method is determined by the server and is usually dependent on the Request-URI. [...]

Community
  • 1
  • 1
roterl
  • 1,843
  • 14
  • 24