json - 带有Grails 2.4.4的JSON Marshallers的嵌套命名配置

标签 json grails domain-driven-design marshalling grails-2.0

我有以下域类:

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/

相关文章:

javascript - 使用 AJAX/JSON 自动更新动态

json - 如何使用流对 Node.js 中的大型嵌套对象进行 JSON 字符串化?

grails - 如何解决grails插件依赖关系

domain-driven-design - 领域驱动设计中的模型应该有多现实?

java - Jackson 序列化没有属性

Javascript - 在 JSON 文件中存储我的游戏的高分

spring - grails- 2.3.4 generate-all命令不起作用

grails - Grails Assets 管道不起作用,似乎无法导入较少的文件

c# - 使用 DDD 和 AutoMapper,您如何在单个工作单元内处理多个服务中的同一个聚合根?

java - 保存聚合根而不暴露嵌套实体