Grails 2.5.0来自JSON POST主体的控制器动作方法参数

时间:2015-07-04 02:32:22

标签: grails controller grails-2.2 grails-2.5

在Grails 2.5.0中,是否可以将JSON POST主体的属性值注入控制器操作方法参数,该参数不是命令对象?例如,变成一个字符串,一个原语等。

这在Grails 2.2.4中是可行的,但我还没有找到一种方法在2.5.0中完成。

(我知道查询字符串值可以注入Grails 2.5.0和2.2.4中的控制器操作方法参数)

1 个答案:

答案 0 :(得分:0)

请参阅http://grails.github.io/grails-doc/2.3.0/guide/introduction.html#whatsNew23中的绑定请求正文到命令对象部分。它在Grails 2.3.x中有所改变。基本上,如果您尝试访问请求JSON两次它将无法使用,因为Grails在解析数据后关闭请求流并使用它来绑定任何CommandObject或任何域实例(作为命令对象)。

因此,如果您将请求JSON传递给某个操作,请说支持:{"foo": "bar"}并且您正在尝试执行此操作:

class SomeController {

    def test(String foo) {
        println foo        // Will be null
        println request.JSON.foo           // Will be "bar"
    }
}

相反,任何域类绑定现在都可以使用:

class MyDomainClass {

     String foo
}

并修改了控制器动作:

class SomeController {

    def test(MyDomainClass domainInstance) {
        println domainInstance.foo        // Will be "bar"
        println request.JSON           // Will be null since request stream is closed and binded to the domainInstance
    }
}