具有错误映射的RestKit PUT请求

时间:2014-12-09 22:03:50

标签: ios objective-c rest error-handling restkit

我正在创建一个与基于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" }

1 个答案:

答案 0 :(得分:1)

我现在感觉很蠢......

服务器响应的代码为200,而不是RKStatusCodeClassClientError预测的400-499范围。