代码之家  ›  专栏  ›  技术社区  ›  gjvatsalya

Grails:为什么GET请求中的JSON没有绑定到controller操作中的command对象?

  •  0
  • gjvatsalya  · 技术社区  · 6 年前

    注意:我使用的是grails2.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,所以它是默认值0)。另一方面, params.duration 打印客户端发送的内容。
    所以这表明数据的发送方式不是问题,而是一些数据绑定问题?

    另外,仅供参考,POST可以很好地与上述服务器端代码配合使用。只要我相应地更改客户机代码(更改方法类型并对JSON进行字符串化),command对象就会得到适当的填充:

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

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

    感谢您的帮助!

    1 回复  |  直到 6 年前
        1
  •  0
  •   gjvatsalya    6 年前

    看起来我只是需要把它移走 contentType 在客户端对GET请求的ajax调用中。一旦我这么做了,一切都如期进行。

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