【发布时间】:2014-12-09 22:03:49
【问题描述】:
我正在制作一个与基于 Rails 的后端服务器通信的应用程序。 我已经准备好所有服务器调用并通过 RESTKit 工作,但我有 为我的更新调用创建错误映射时出现问题。
我的一个类的响应描述符
RKResponseDescriptor *descriptor = [RKResponseDescriptor responseDescriptorWithMapping:[Mappings liveViewMapping]
method:RKRequestMethodAny
pathPattern:nil
keyPath:@"event_enriched"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[self addResponseDescriptor:descriptor];
RKResponseDescriptor *errorDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[Mappings errorMapping]
method:RKRequestMethodAny
pathPattern:nil
keyPath:@"error"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)];
[self addResponseDescriptor:errorDescriptor];
编辑:我也尝试过 keyPath "errors" 和 'nil' .. 相同的结果
我的错误映射很简单:
+ (RKObjectMapping *)errorCollectionMapping {
RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[ErrorCollection class]];
NSDictionary *mappingDictionary = @{@"error" : @"message",
@"errors" : @"messages",
};
[errorMapping addAttributeMappingsFromDictionary:mappingDictionary];
return errorMapping;
}
这就是我尝试更新 Book 对象的方式
[self putObject:book
path:API_BOOK
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
if (success) {
Book *book = [mappingResult.dictionary objectForKey:@"book"];
success(book);
}
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
if (failure) failure(operation, error);
}
];
但是当我收到一个服务器错误时,应该由我的响应描述符处理,我收到以下错误:
Error Domain=org.restkit.RestKit.ErrorDomain Code=1001 “在搜索的关键路径中找不到可映射的对象表示。” UserInfo=0x7f935d07c7a0 {NSLocalizedDescription=在搜索的关键路径中找不到可映射的对象表示。, NSLocalizedFailureReason=映射操作无法在搜索的关键路径中找到任何嵌套对象表示:书 发现输入到映射器的表示在以下关键路径中包含嵌套对象表示:error、error_description 这可能表明您为映射配置了错误的键路径。keyPath=null,DetailedErrors=( )}
我做错了什么? 我已经有一些 GET 请求,它们有多个映射(其中没有一个是错误映射),它们工作正常,但不能用错误映射“复制”相同的行为
哦.. 我正在使用 restkit-0.24 :)
编辑: 从我的 Rails 服务器返回的错误响应是这种形式:
{"errors": ["error1", "error2" ... ] }
或
{"error": "error message" }
【问题讨论】:
-
显示错误响应的 JSON。另外,
errorMapping和errorCollectionMapping方法有什么区别? -
我已经编辑了我的帖子。不同的是我的错字:$ 我做了一些更改,忘记在文本中更改它。实际上它的方法相同
标签: ios objective-c rest error-handling restkit