在下面的示例中使用多态关联时,是否有一种优雅的方式来处理 JSON 响应?
JSON响应:
[
{
"created_at":"2017-12-13T10:37:36Z",
"id":16,
"parent_id":21,
"parent_type":"app.models.Site",
"store_number":"0070004900049",
"updated_at":"2017-12-13T10:37:36Z",
"value":"fake value",
"parents":{
"sites":[
{
"created_at":"2017-12-13T10:37:36Z",
"id":21,
"section_id":21,
"updated_at":"2017-12-13T10:37:36Z"
}
]
}
}
]
我有 3 个模型:参数作为多态模型,具有 parent_id 和 parent_type 列,Site。
以下是我如何测试 JSON 响应ParametersControllerSpec
:
Map[] siteSettingsMaps = JsonHelper.toMaps(responseContent());
the(siteSettingsMaps.length).shouldBeEqual(1);
Map siteSetting = siteSettingsMaps[0];
the(siteSetting.get("value")).shouldBeEqual("fake value");
the(siteSetting.get("store_number")).shouldBeEqual(STORE_NUMBER);
到现在为止还可以。但是如何提取父母地图?当我这样尝试时:
Map<String, Map []> parents = (Map<String, Map []>)siteSettingsMaps[0].get("parents");
Map[] sites = parents.get("sites");
Map site = sites[0];
我得到了ava.lang.ClassCastException: java.util.ArrayList cannot be cast to [Ljava.util.Map;
。为什么不是地图?我应该投到 List 吗?我没有找到任何方法getParents()
,例如,只有 setter 。谢谢你。