tec*_*bar 5 grails groovy json marshalling unmarshalling
我的Persongrails应用程序中有一个域类,我需要根据上下文以不同的形式(JSON)输出.
在一个上下文中,我只需要渲染几个字段(比如id和name).在另一个上下文中,我想渲染更多(id,name,credentials,age等).我想知道是否有可能在使用后立即取消注册特定的编组.
基本上我正在寻找的是:
-------------------------------------------------------------
// 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?
-------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
注意:我可以为Person创建2个空子类,然后为每个子类注册单独的Marshallers.随着上下文数量的增加,虚拟子类的数量也会增加.这是非常不洁净的imo.
Joe*_*art 17
你可能想要使用所谓的命名配置而不是'交换'marshallers.你可以将它包装成一个更整洁的类/实用程序,但在某个地方(如Bootstrap.groovy),执行:
JSON.createNamedConfig('thin') {
it.registerObjectMarshaller( Person ) { Person person ->
return [
id: person.id,
name: person.name,
]
}
}
JSON.createNamedConfig('full') {
it.registerObjectMarshaller( Person ) { Person person ->
return [
id: person.id,
name: person.name,
age: person.age
]
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在控制器中,您可以选择要显示的编组人员的样式:
// Show lots of stuff
JSON.use('full') {
render people as JSON
}
Run Code Online (Sandbox Code Playgroud)
要么
// Show less stuff
JSON.use('thin') {
render people as JSON
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |