Grails格式执行

Grails格式执行,grails,Grails,我遇到了一个问题,在查询字符串上使用format=json参数向grails1.3.7发送帖子 基于GrailswithFormatdocumentation-,此参数应导致withFormat闭包在内部执行json闭包 i、 e: 在本例中,控制器方法服务于多种内容类型。有一些逻辑应该只对表单运行,因此添加了withFormat闭包,如下所示: withFormat { form { // form specific logic } } 注意,没有json块,

我遇到了一个问题,在查询字符串上使用
format=json
参数向grails1.3.7发送帖子

基于Grails
withFormat
documentation-,此参数应导致
withFormat
闭包在内部执行
json
闭包

i、 e:

在本例中,控制器方法服务于多种内容类型。有一些逻辑应该只对表单运行,因此添加了
withFormat
闭包,如下所示:

withFormat {
    form {
        // form specific logic
    }
}
注意,没有
json
块,因为如果这是一个json请求,则没有相应的逻辑可执行。问题是,表单块甚至在我们对查询字符串发送
format=json
的请求上执行


为什么会发生这种情况?

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

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

withFormat {
    json {
        // do nothing
    }
    form {
        // form specific logic
    }
}

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

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

withFormat {
    json {
        // do nothing
    }
    form {
        // form specific logic
    }
}