如何在 RestKit 中定义不在同一个 JSON 文档中的实体之间的关系映射?

Posted

技术标签:

【中文标题】如何在 RestKit 中定义不在同一个 JSON 文档中的实体之间的关系映射?【英文标题】:How to define relationships mapping between entities that are not in the same JSON document in RestKit? 【发布时间】:2013-06-20 07:55:39 【问题描述】:

使用 RestKit 0.20.2

示例: 我设置了 2 个核心数据实体 'Album' 和 'Song' 以及关系来定义一张专辑有几首歌曲,而一首歌曲属于一个专辑。

我做了实体映射,我可以成功显示专辑列表。

我打电话:

/albums获取相册

/albums/:albumId/songs获取albumId指定专辑的歌曲

我从来没有一个 JSON 文档同时保存一张专辑及其歌曲。 (github 上提供的所有 RestKit 示例都假定您处理将所有实体放在一起的单个 JSON 文档)

如何设置两个实体之间的关系以使 RestKit 在我的 Core Data 对象存储中正确写入?

【问题讨论】:

您向服务器发出的获取专辑歌曲的请求应该在 URL 路径中包含专辑标识 - 是吗? 确实如此。我将问题编辑得更清楚 【参考方案1】:

您需要使用RKObjectManager 和路由。

在配置您的映射时,包含从路由 URL 中提取 albumId 并将其存储到歌曲的临时属性中的项目:

@"@metadata.routing.parameters.albumId": @"connectionAlbumId",

然后,您可以添加关系映射以将歌曲连接到相应的专辑:

[songMapping addConnectionForRelationship:@"album" connectedBy:@ @"connectionAlbumId": @"identity" ];

其中@"identity" 是保存专辑管理对象上标识的属性的名称。

【讨论】:

我不应该在专辑映射中添加一些东西吗? 和那个临时属性,我不应该让它持久化吗?因为我需要它来过滤获取请求块中的歌曲实体... 如果你想将它用于其他事情,你可以让它持久化。这种关系应该是双向的,因此只有在一端完成它也会自动完成另一端(Core Data 自己完成)。 谢谢你,在搜索文档数小时后帮助了我很多!

以上是关于如何在 RestKit 中定义不在同一个 JSON 文档中的实体之间的关系映射?的主要内容,如果未能解决你的问题,请参考以下文章

RestKit:如何定义可选(嵌套)键路径

Restkit 0.24.0:如何将对象(包括对多关系)序列化为 JSON

RestKit 自定义序列化

Restkit 将多个 json 提要映射到同一个数组

如何使用 RestKit 将嵌套的 JSON 对象存储到核心数据中

在其 HTTP 正文中嵌套 JSON 的 RestKit 对象映射请求