我有以下域类:

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); 

也许对您有帮助。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!