无法映射单个对象
Cannot map single object
我在使用 RestKit 时遇到问题。
我有一个端点,items/
我可以在其中 GET
一组项目。这是一个示例 return:
[
{ 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 为 "items" 时,则成功。但是当 ENDPOINT 是 "items/2" 时,我得到一个 No response descriptors match the response loaded
。如果我检查 operation.HTTPRequestOperation.responseString
,然后我看到提取成功,但问题是它没有映射它。
我在这里错过了什么??
编辑:我应该补充一点,我不拥有后端,应该在 iOS 中完成修复。
问题在于不同的端点响应:items/
returns 一个 对象数组 而 items/<item_id>
returns 单个对象,没有数组。观察 items/
中的 []
中不存在于 items/<item_id>
中的括号
您正在尝试将 items/<item_id>
的结果解析为对象数组,这导致了错误。
解决此问题的一个简单方法是强制包含单个项目的结果以将其解析为数组。尝试转换
{ item_id: 2 }
进入
[ { item_id: 2} ]
并且您的解析在这两种情况下都应该有效。
您需要添加路径模式为 items/:id
的第二个响应描述符,因为简单路径模式不匹配。
我在使用 RestKit 时遇到问题。
我有一个端点,items/
我可以在其中 GET
一组项目。这是一个示例 return:
[
{ 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 为 "items" 时,则成功。但是当 ENDPOINT 是 "items/2" 时,我得到一个 No response descriptors match the response loaded
。如果我检查 operation.HTTPRequestOperation.responseString
,然后我看到提取成功,但问题是它没有映射它。
我在这里错过了什么??
编辑:我应该补充一点,我不拥有后端,应该在 iOS 中完成修复。
问题在于不同的端点响应:items/
returns 一个 对象数组 而 items/<item_id>
returns 单个对象,没有数组。观察 items/
中的 []
中不存在于 items/<item_id>
您正在尝试将 items/<item_id>
的结果解析为对象数组,这导致了错误。
解决此问题的一个简单方法是强制包含单个项目的结果以将其解析为数组。尝试转换
{ item_id: 2 }
进入
[ { item_id: 2} ]
并且您的解析在这两种情况下都应该有效。
您需要添加路径模式为 items/:id
的第二个响应描述符,因为简单路径模式不匹配。