2015-07-10 117 views
0

我有一个有3个类的模型,A,Parent和Child。一个hasMany父母和Child延伸父母。Grails 2.4.4绑定JSON嵌套对象

我需要处理UI上的复杂逻辑以创建模型,并决定使用与我的域模型相同的结构发布JSON对象。现在,我有一个A的实例,它有一些关联的Child实例,即在客户端的JavaScript对象中。当我POST的JavaScript对象,序列化为一个JSON字符串,控制器收到它确定,然后我这样做:def a = new A(request.JSON);

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

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

UPDATE

由控制器接收的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类Child1和CHILD2从父继承。

我已经将“class”属性添加到对象中,因为我读到可能会解决问题,但没有。当我打印与A实例关联的对象时,我得到了正确数量的实例,但是所有类都是“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) 
] 
+0

请发布您的控制器上的json – dsharew

+0

@DegenSharew我已经添加了一些示例。 –

+0

仍然很难看出实际的类层次结构,但尝试将pakcagename.class用于json中类的值。例如。类:“com.apar.Child” – dsharew

回答

0

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