0

我在向Grails 1.3.7发送带有format=json查询字符串参数的 POST 时遇到问题。

根据 GrailswithFormat文档 - http://grails.org/doc/1.3.7/ref/Controllers/withFormat.html,此参数应该导致withFormat闭包在其中执行json闭包。

IE:

withFormat {
    json {
        // this logic should be executed if the query string has format=json
    }
} 

在这种情况下,控制器方法服务于多种内容类型。有一些逻辑应该只对表单运行,所以withFormat像这样添加了一个闭包:

withFormat {
    form {
        // form specific logic
    }
}

注意没有json阻塞,因为如果这是一个 json 请求,就没有相应的逻辑可以执行。问题是即使在我们发送format=json查询字符串的请求上,表单块也正在执行。

为什么会发生这种情况?

4

1 回答 1

4

显然,如果您没有在 withFormat 中指定匹配的闭包,Grails 仍然会运行一个。Grails 文档确实指出,如果请求格式为“全部”,它将执行 withFormat 块中的第一个闭包。我想如果您的请求格式与 withFormat 块中的一个闭包不匹配,Grails 默认运行第一个闭包。

为了解决这个问题,我们在 withFormat 中放置了一个空的 json 闭包,从那时起 Grails 会按预期处理所有内容。

withFormat {
    json {
        // do nothing
    }
    form {
        // form specific logic
    }
}
于 2012-06-22T18:52:51.600 回答