我有以下域类:
class Domain1{
String prop1
Domain2 prop2
}
class Domain2{
String prop3
}
每个都有2个命名的Marshaller配置
JSON.createNamedConfig('PUBLIC_API'){
it.registerObjectMarshaller(Domain1){Domain1 domain1->
return ['key1': domain1.prop1, 'key2': domain1.prop2]
}
}
JSON.createNamedConfig('PUBLIC_API'){
it.registerObjectMarshaller(Domain2){Domain2 domain2->
return ['key1': domain2.prop3]
}
}
当我尝试使用此命名配置时,仅在父域的对象上进行编码,嵌套/子类的编码甚至都不会被调用。
因此,使用此配置
JSON.use('PUBLIC_API'){
render domain1 as JSON
}
结果是
{
"key1": "value1",
"key2": {
"id": 1,
"class" : "Domain2",
"prop3" : "value2"
}
}
我在grails documentation中找不到有关命名编码配置的用法
有人使用过这种用例吗?还是甚至可以支持?
最佳答案
我已经解决了同样的问题:
对于我的客户,我从不同的域发送类似的json:
JSON.registerObjectMarshaller(Domain1) { Domain1 domain1->
return [
id : domain1.id,
label : domain1.prop
]
}
JSON.registerObjectMarshaller(Domain2) { Domain2 domain2->
return [
id : domain2.id,
label : domain2.anotherProp
]
}
render((domains1+ domains2) as JSON);
也许对您有帮助。
关于json - 带有Grails 2.4.4的JSON Marshallers的嵌套命名配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28026927/