无法映射单个对象

时间:2016-01-07 21:13:32

标签: ios swift rest restkit

我在使用RestKit时遇到了问题。

我有一个端点,items/我可以GET一组项目。以下是返回示例:

[
  { item_id: 1 },
  { item_id: 2 },
  { item_id: 3 }
]

我还可以执行items/<item_id>之类的操作来获取一个项目。例如,如果我GET items/2我会得到这个:

{ item_id: 2 }

我这样映射:

let itemsResponseMapping: RKObjectMapping = RKObjectMapping(withClass: MyItem.self)
itemsResponseMapping.addAttributeMappingsFromDictionary(["item_id" : "itemId"])

let responseDescriptor = RKResponseDescriptor(
        mapping: itemsResponseMapping,
        method: RKRequestMethod.GET,
        pathPattern: "items",
        keyPath: nil,
        statusCodes: RKStatusCodeIndexSetForClass(RKStatusCodeClass.Successful)
)
objectManager.addResponseDescriptor(responseDescriptor);

所以,请求我这样做:

RKObjectManager.sharedManager().getObjectsAtPath(
        ENDPOINT,
        parameters: nil,
        success: {(operation: RKObjectRequestOperation!, mapping: RKMappingResult!) -> Void in
            //whatever
        },
        failure: {(operation: RKObjectRequestOperation!, error: NSError!) -> Void in
            //whatever
        }

当ENDPOINT是&#34; item&#34;然后它成功了。但是当ENDPOINT是&#34; items / 2&#34;时,我得到一个No response descriptors match the response loaded。如果我检查operation.HTTPRequestOperation.responseString,那么我看到获取成功,但问题是它没有映射它。

我在这里缺少什么?

编辑:我应该补充说我不拥有后端,修复应该在iOS中完成。

2 个答案:

答案 0 :(得分:2)

您需要添加第二个响应描述符,路径模式为items/:id,因为简单路径模式不匹配。

答案 1 :(得分:1)

问题在于不同的端点响应:items/返回对象数组,而items/<item_id>返回单个对象,没有数组。观看[]

中不存在的items/括号items/<item_id>

您正在尝试将items/<item_id>的结果解析为一个对象数组,这会导致错误。

解决此问题的一种简单方法是强制将单个项的结果括起来将其解析为数组。尝试转换

{ item_id: 2 }

进入

[ { item_id: 2} ]

你的解析应该适用于这两种情况。