我在这里阅读了几篇关于如何做到这一点的帖子,但我只能让它工作到一半。
这有效(将 json 对象作为文本发送):
function go(itemid)
{
apiRoutes.controllers.Application.addItem(itemid).ajax({
data: '{"reqid":0,"iid":2,"description":"adsf"}',
dataType: 'text',
contentType:'application/json',
success: function(reply) {
alert(reply)
}
});
}
这不会(将对象作为 json 发送):
function go(itemid)
{
apiRoutes.controllers.Application.addItem(itemid).ajax({
data: {"reqid":0,"iid":2,"description":"adsf"},
dataType: 'text',
contentType:'application/json',
success: function(reply) {
alert(reply)
}
});
}
而我真正想做的是这样的(我已经设置了适当的组合器):
function go(itemid)
{
apiRoutes.controllers.Application.addItem(itemid).ajax({
data: @Html(Json.stringify(Json.toJson(item))),
dataType: 'text',
contentType:'application/json',
success: function(reply) {
alert(reply)
}
});
}
我的控制器如下所示:
def addItem(id: Long) = Action (parse.json) { implicit request =>
Logger.info("add item")
request.body.validate(Item.itemReads).map { item =>
thing.addItem(item)
Ok("Succesfully added item.")
}.recoverTotal{
e => BadRequest("Detected error:"+ JsError.toFlatJson(e))
}
}
在第二种情况下,它永远不会到达日志记录代码。相反,它会立即返回 400 Bad Request(我认为这可能是在 Action (parse.json) 位中触发的)。
我宁愿将对象作为 json 发送,因为当我转换为字符串时,描述中碰巧有一个撇号 ('),这会把事情搞砸。我可能会避开撇号,但希望我错过了一些关于如何使用对象而不是字符串来执行此操作的简单内容。
谢谢