Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Grails-如何注销已注册的对象封送器_Json_Grails_Groovy_Marshalling_Unmarshalling - Fatal编程技术网

Json Grails-如何注销已注册的对象封送器

Json Grails-如何注销已注册的对象封送器,json,grails,groovy,marshalling,unmarshalling,Json,Grails,Groovy,Marshalling,Unmarshalling,我的grails应用程序中有一个域类Person,我需要根据上下文以不同形式(JSON)输出它 在一个上下文中,我只需要呈现几个字段(比如id和name)。在另一个上下文中,我想呈现更多内容(id、名称、凭据、年龄等)。我想知道是否有可能在使用后立即注销特定的封送员 基本上,我要寻找的是: ------------------------------------------------------------- // context #1 JSON.registerObjectMarshall

我的grails应用程序中有一个域类
Person
,我需要根据上下文以不同形式(JSON)输出它

在一个上下文中,我只需要呈现几个字段(比如id和name)。在另一个上下文中,我想呈现更多内容(id、名称、凭据、年龄等)。我想知道是否有可能在使用后立即注销特定的封送员

基本上,我要寻找的是:

-------------------------------------------------------------

// context #1
JSON.registerObjectMarshaller(Person) {
    ... output just id and name
}

render myPerson as JSON

JSON.unregisterObjectMarshaller(Person) // how do i do this?

-------------------------------------------------------------

// context #2
JSON.registerObjectMarshaller(Person) {
    ... output all fields
}

render myPerson as JSON

JSON.unregisterObjectMarshaller(Person) // how do i do this?

-------------------------------------------------------------

注意:我可以为Person创建两个空子类,然后为每个子类注册单独的封送员。随着上下文数量的增加,虚拟子类的数量也会增加。这在我看来是非常不干净的。

您可能希望使用所谓的命名配置,而不是“交换”封送拆收器。您可以将其封装到一个更简洁的类/实用程序中,但在某些地方(如Bootstrap.groovy),您可以:

然后,在控制器中,您可以选择要显示的编组人员样式:

// Show lots of stuff
JSON.use('full') {
    render people as JSON
}


+这真漂亮。而且非常干净。非常感谢。我会把它放进去,让你知道它是怎么回事。效果很好。谢谢。:)这是一个很好的解决方案。有没有一种方法可以将其与Grails的“响应”功能结合使用,从而使用XML和JSON的命名封送器?说到将其很好地捆绑起来,这里有一种方法可以做到这一点:
// Show lots of stuff
JSON.use('full') {
    render people as JSON
}
// Show less stuff
JSON.use('thin') {
    render people as JSON
}