POST ing json from javascript to server in Play Framework:

```
var myJson = {"name": "joe", "age":20};
var obj = JSON.parse(myJson);

$.ajax(jsRoutes.controllers.MyController.create(obj));

```

Now, I have the javascript router configured fine. If i recieve the obj as a string I can print it out to the console just fine.

```
routes.conf:

POST    /person/add     controllers.MyController.createFromAjax(ajax: String)

```

BUT, I want to write the json to MongoDB using an Async promise which Activator gives the compile time error:

```
scala.concurrent.Future[play.api.mvc.Result][error]  cannot be applied to (String)

```

I have other routes that take no parameters that receive json using Postman and write it to MongoDB just fine

```
routes.conf

POST    /heartrates/bulk            controllers.HRController.createFromJson 

```

If I omit the parameter on the route that receives the json from Ajax instead of using Postman I get a HTTP 400 error in the browser.

```
POST http://localhost:9000/person/add 400 (Bad Request)

```

SO, my question is, Ajax needs a parameter but String wont work. Play documentation says json is always received as a String. What am I doing wrong here? 

Scala Controller Code taken from Lightbend seed Play.Reactive.MongoDB:

```
def createBulkFromAjax = Action.async(parse.json) { request =>

val documents = for {
  heartRate        <- request.body.asOpt[JsArray].toStream
  maybeHeartRate   <- heartRate.value
  validHeartRate   <- maybeHeartRate.transform(transformer).asOpt.toList
} yield validHeartRate

for {
  heartRate <- hrFuture
  multiResult <- heartRate.bulkInsert(documents = documents, ordered = true)
} yield {
  Logger.debug(s"Successfully inserted with multiResult: $multiResult")
  Created(s"Created ${multiResult.n} heartRate")
}
}

```