У меня есть модель с 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)
]
, пожалуйста, напишите json, который вы получаете на своем контроллере. – dsharew
@DegenSharew Я добавил несколько образцов. –
по-прежнему трудно помочь, увидев фактическую иерархию классов, но попробуйте поставить pakcagename.class для значения класса в json. например. класс: «com.apar.Child» – dsharew