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對象並創建域實例的代碼。