Grails 2.4.4 绑定 JSON 嵌套对象
Grails 2.4.4 binding JSON nested objects
我有一个模型有 3 个 classes,A,Parent 和 Child。一个 hasMany Parent,Child extends Parent。
我需要处理 UI 上的复杂逻辑来创建模型,因此决定 POST 一个与我的领域模型具有相同结构的 JSON 对象。现在,我有一个 A 实例,它有一些关联的 Child 实例,在客户端的 javascript 对象中。
当我 POST 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 个 class 继承自 Parent 的 Child1 和 Child2。
我已将 "class" 属性添加到对象,因为我读到这可能会解决问题,但事实并非如此。
当我打印与 A 实例关联的对象时,我得到了正确数量的实例,但是所有 class 都是 "Parent",如您所见,一些值是绑定的,但都是 Parent class.
的所有属性
[
(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 对象并创建域实例的代码。
我有一个模型有 3 个 classes,A,Parent 和 Child。一个 hasMany Parent,Child extends Parent。
我需要处理 UI 上的复杂逻辑来创建模型,因此决定 POST 一个与我的领域模型具有相同结构的 JSON 对象。现在,我有一个 A 实例,它有一些关联的 Child 实例,在客户端的 javascript 对象中。
当我 POST 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 个 class 继承自 Parent 的 Child1 和 Child2。
我已将 "class" 属性添加到对象,因为我读到这可能会解决问题,但事实并非如此。
当我打印与 A 实例关联的对象时,我得到了正确数量的实例,但是所有 class 都是 "Parent",如您所见,一些值是绑定的,但都是 Parent class.
的所有属性[
(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 对象并创建域实例的代码。