Grails 2.4.4 связывает вложенные объекты JSON

У меня есть модель с 3 классами: A, Parent и Child. Родитель hasMany, а потомок расширяет родителя.

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

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

Экземпляр A создан, но в отношении 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 класса Child1 и Child2, которые наследуются от Parent.

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

Когда я печатаю объекты, связанные с экземпляром 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)
]

person Pablo Pazos    schedule 10.07.2015    source источник
comment
пожалуйста, опубликуйте json, который вы получаете на своем контроллере   -  person dsharew    schedule 10.07.2015
comment
@DegenSharew Я добавил несколько образцов.   -  person Pablo Pazos    schedule 11.07.2015
comment
все же трудно помочь, не видя реальной иерархии классов, но попробуйте указать pakcagename.class для значения class в json. например. класс: com.apar.Child   -  person dsharew    schedule 13.07.2015
comment
Добавил пакет, не работает. Кажется, мне нужно сделать переплет вручную. Иерархия классов описана в начальном вопросе. У меня просто разные имена классов (A=Query, Parent=DataCriteria, Child1=DataCriteriaDV_CODED_TEXT, Child2=DataCriteriaDV_QUANTITY), код здесь: github.com/ppazos/cabolabs-ehrserver/tree/   -  person Pablo Pazos    schedule 17.07.2015


Ответы (1)


В итоге я создал код, который проходит через объект JSON и создает экземпляры домена.

person Pablo Pazos    schedule 14.10.2017