2015-07-10 4 views
0

У меня есть модель с 3 классами, A, Родитель и ребенок. У меня есть родитель, а Child - родитель.Grails 2.4.4 binding JSON вложенные объекты

Мне нужно обработать сложную логику в пользовательском интерфейсе, чтобы создать модель, и решил POST объект JSON с той же структурой моей модели домена. Теперь у меня есть экземпляр A, в котором есть некоторые дочерние элементы, связанные с дочерним элементом, которые находятся в объекте javascript на стороне клиента.

Когда я отправляю объект javascript, сериализуя его в строку JSON, контроллер получает его в порядке, тогда я делаю: def a = new A (request.JSON);

Экземпляр экземпляра создается, но в отношениях hasMany у него есть экземпляры родителя вместо экземпляров 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 классов child1 и child2, который наследует от Parent.

Я добавил атрибут «class» к объектам, потому что прочитал, что может решить проблему, но это не так.

Когда я печатаю объекты, связанные с экземпляром A, я получил правильное количество экземпляров, но все классы являются «родительскими», как вы можете видеть, некоторые значения привязаны, но все атрибуты класса родителя ,

[ 
(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 и создает экземпляры домена.

Смежные вопросы