【发布时间】:2017-12-13 13:18:12
【问题描述】:
在以下示例中使用多态关联时,是否有一种优雅的方式来处理 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 个模型:Parameter 作为多态模型,具有 parent_id 和 parent_type 列,Site。
这是我在ParametersControllerSpec 中测试 JSON 响应的方式:
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。谢谢。
【问题讨论】:
-
我可以得到这样的父母:
Map parents = (Map) siteSettingsMaps[0].get("parents");。然后我可以得到网站列表:List<Map> sites = (List<Map>) parents.get("sites");。正确的 ?但是如何获取 Site 对象(不是其键/值的 Map 才能获取SiteparentSection?或者我的测试方式错误?