【问题标题】:How to map an empty 200 response with Restkit?如何使用 Restkit 映射一个空的 200 响应?
【发布时间】:2025-12-24 18:20:20
【问题描述】:

首先让我说我知道问题在于后端是响应,但对此我无能为力。所以……

我有一个 GET 请求,在某些情况下,它会发回一个 200 响应,但正文为空。再一次,不能改变它。

使用 Restkit,我几乎可以正确映射所有可能的情况,并且一切都像魅力一样工作,但是对于这种特定情况,我无法按应有的方式对其进行映射。

从我所看到的一切来看,this 似乎是我想要做的最准确的选择。

但是,由于某种原因,响应描述符似乎没有被拾取,响应被视为失败并出现以下错误:

Error Domain=org.restkit.RestKit.ErrorDomain Code=-1017 “加载了一个内容类型为 'application/json' 的无法处理的响应 (200)”

有没有一种“简单”的方法来正确映射一个空响应,甚至是一个字符串作为响应(显然没有任何 JSON 结构)?

提前感谢您对我的指导。

【问题讨论】:

  • 您说some cases,那么您是否有多个响应描述符匹配相同的路径模式?您有正确的解决方案,问题是为什么不使用它...
  • 是的,没错。 GET 请求总是发送 200 响应:当出现错误时,它会发送带有相关信息的 JSON;当成功时,它会发送一个空的正文响应。目前我有映射和响应描述符(根据提供的链接映射到 NSNull)。问题是,空响应永远不会映射到 NSNull 并且我得到了提到的错误。就像没有考虑响应描述符一样。

标签: iphone objective-c restkit restkit-0.20


【解决方案1】:

正如in this post 所述,您的问题有更好的解决方案。

您可以简单地将带有 ObjectMapping 的 ResponseDescriptor 添加到 NSNull:

// Create RKObjectMapping for NSNull:
RKObjectMapping* responseMapping = [RKObjectMapping mappingForClass:[NSNull class]];

// Create RKResponseDescriptor with mapping:
RKResponseDescriptor* response = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping
                                                                              method:RKRequestMethodAny
                                                                         pathPattern:@"/yourPathPattern"       
                                                                             keyPath:nil
                                                                         statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];


// Add RKResponseDescriptor to RKObjectManager:
[[RKObjectManager sharedManager] addResponseDescriptor:response];

【讨论】:

  • 这个问题的简单答案。谢谢
【解决方案2】:

在这种情况下,您不应该有 2 个响应描述符,而应该只有一个。该响应描述符链接到 dynamic mapping,后者分析响应并返回适当的映射(来自您的 2 个现有映射)。

【讨论】:

  • 您知道,直到今天早上解决了另一个问题,我才读过动态映射,而且我从来没有想过它也可以解决这个问题。非常感谢!!
  • 是的,动态映射。 Wain 提供的链接似乎很旧(当前未加载)。试试github.com/RestKit/RestKit/wiki/Object-mapping 并搜索“动态映射”