首页 > 解决方案 > Grails:为什么来自 GET 请求的 JSON 没有绑定到控制器操作中的命令对象?

问题描述

注意:我使用的是 Grails 2.5.5。

这是我在控制器中的方法(我知道 save() 不应该是 GET,但我只是在测试一下):

def save(Test cmd) {
    println cmd.duration
    println params.duration
}

这是我的客户代码:

let data = JSON.parse($('#req').val());
$.ajax({
    url: url,
    data: data,
    method: 'GET',
    contentType: 'application/json'
});  

执行此流程时,在控制器端,cmd.duration不打印从客户端发送的内容(而是默认值为零,因为持续时间被键入为 int)。另一方面,params.duration打印从客户端发送的内容。
所以这表明这不是数据如何发送的问题,而是与一些数据绑定问题有关?

此外,仅供参考,POST 与上述服务器端代码完美配合。只要我相应地更改客户端代码(更改方法类型并将 JSON 字符串化),命令对象就会被适当地填充:

let data = JSON.parse($('#req').val());
$.ajax({
    url: url,
    data: JSON.stringify(data),
    method: 'POST',
    contentType: 'application/json'
});  

我知道那里有类似的问题,但似乎大多数都处理 POST 请求的问题。所以这有点不同。

任何帮助表示赞赏!

标签: grailsgrails-2.0grails-controller

解决方案


看起来我只需要contentType在客户端的 ajax 调用中删除 GET 请求。一旦我这样做了,一切都按预期工作。

不确定这是否是预期的行为,但它现在对我有用。


推荐阅读