POST ИНГ JSON с JavaScript на сервере в Play Framework:Play Framework 2.5 АЯКС параметр JSON маршрут асинхронной MongoDB
var myJson = {"name": "joe", "age":20};
var obj = JSON.parse(myJson);
$.ajax(jsRoutes.controllers.MyController.create(obj));
Теперь у меня есть Java-маршрутизатор настроен отлично. Если я получаю obj как строку, я могу просто распечатать ее на консоли.
routes.conf:
POST /person/add controllers.MyController.createFromAjax(ajax: String)
НО, я хочу написать JSON в MongoDB используя обещание Async, который Активатор дает ошибку во время компиляции:
scala.concurrent.Future[play.api.mvc.Result][error] cannot be applied to (String)
У меня есть другие маршруты, которые не принимают никаких параметров, которые получают JSON с помощью почтальона и записать его в MongoDB просто отлично
routes.conf
POST /heartrates/bulk controllers.HRController.createFromJson
Если я опустить параметр на маршрут, который принимает JSON из Ajax вместо того, чтобы использовать Почтальон я получаю ошибку HTTP 400 в братан Wser.
POST http://localhost:9000/person/add 400 (Bad Request)
SO, мой вопрос, Ajax нуждается в параметре, но String не будет работать. Документация по игре говорит, что json всегда принимается как строка. Что я здесь делаю неправильно?
Scala Controller Код взят из Lightbend семян 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")
}
}
Можете ли вы показать нам свой код контроллера? – millhouse
Добавлен код контроллера Scala. –