Grails:为什么来自GET请求的JSON在控制器操作中未绑定到命令对象?

时间:2018-08-17 16:44:04

标签: grails grails-2.0 grails-controller

注意:我正在使用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不会打印从客户端发送的内容(相反,由于将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请求有关。所以这有点不同。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

似乎我只需要删除GET请求的客户端ajax调用中的contentType。一旦这样做,一切都会按预期进行。

不确定这是否是预期的行为,但目前对我有效。