Grails 2.4.4绑定JSON嵌套对象

时间:2015-07-10 04:04:20

标签: javascript json grails openehr

我有一个包含3个班级的模型,A,父母和孩子。 hasMany Parent,Child扩展Parent。

我需要在UI上处理复杂的逻辑来创建模型,并决定使用与我的域模型相同的结构POST一个JSON对象。现在,我有一个A的实例,它有一些Child关联的实例,在客户端的javascript对象中。

当我发布javascript对象,将其序列化为JSON字符串时,控制器接收它确定,然后我这样做:def a = new A(request.JSON);

创建了一个实例,但是在hasMany关系中它有Parent实例而不是Child实例,所以我丢失了Child的所有属性值。

如何告诉Grails创建Child的实例而不是Parent的实例?

更新

控制器收到的request.JSON结构如下所示:

[
 name: name,
 group: none,
 where: [
    [
        codeOperand: in_list,
        archetypeId: openEHR-EHR-EVALUATION.problem_diagnosis.v1,
        codeValues: [
            aaa,
            bbb
        ],
        path: /data[at0001]/items[at0005]/value,
        class: Child1,
        terminologyIdValues: [
            cie
        ],
        rmTypeName: DV_CODED_TEXT,
        terminologyIdOperand: eq
    ],
    [
        magnitudeValues: [
            1,
            22
        ],
        archetypeId: openEHR-EHR-OBSERVATION.blood_pressure.v1,
        path: /data[at0001]/events[at0006]/data[at0003]/items[at0004]/value,
        unitsOperand: eq,
        class: Child2,
        magnitudeOperand: between,
        rmTypeName: DV_QUANTITY,
        unitsValues: [
            mmHg
        ]
    ]
 ]
]

在这种情况下,我有2个继承自Parent的Child1和Child2类。

我已经在对象中添加了“class”属性,因为我读过这可能会解决问题,但事实并非如此。

当我打印与A实例关联的对象时,我得到了正确数量的实例,但是所有类都是“Parent”,如您所见,某些值是绑定的,但都是Parent类的所有属性。

[
 (archetypeId: openEHR-EHR-EVALUATION.problem_diagnosis.v1,
  path: /data[at0001]/items[at0005]/value,
  rmTypeName: DV_CODED_TEXT,
  class: Parent),
 (archetypeId: openEHR-EHR-OBSERVATION.blood_pressure.v1,
  path: /data[at0001]/events[at0006]/data[at0003]/items[at0004]/value, 
  rmTypeName: DV_QUANTITY,
  class: Parent)
]

1 个答案:

答案 0 :(得分:0)

我最终创建了遍历JSON对象并创建域实例的代码。