我正在创建一个与基于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"错误"并且' 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);
}
];
但是当我收到服务器错误时,应该由我的响应描述符处理,我收到以下错误:
错误Domain = org.restkit.RestKit.ErrorDomain Code = 1001"在搜索的关键路径中找不到可映射的对象表示。" UserInfo = 0x7f935d07c7a0 {NSLocalizedDescription =在搜索的关键路径中找不到可映射的对象表示。,NSLocalizedFailureReason =映射操作无法在搜索的关键路径中找到任何嵌套对象表示:book 发现输入到映射器的表示包含以下关键路径的嵌套对象表示:error,error_description 这可能表示您错误配置了映射的关键路径。,keyPath = null,DetailedErrors =( )}
我做错了什么? 我已经有了一些GET请求,它们有多个映射(其中没有映射是错误映射),它可以正常工作,但不能复制"与错误映射相同的行为
哦..我正在使用restkit-0.24:)
编辑: 从我的rails服务器返回的错误响应采用以下形式:
{"errors": ["error1", "error2" ... ] }
或
{"error": "error message" }
答案 0 :(得分:1)
我现在感觉很蠢......
服务器响应的代码为200,而不是RKStatusCodeClassClientError预测的400-499范围。