【问题标题】:RestKit PUT request with error mapping带有错误映射的 RestKit PUT 请求
【发布时间】: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。另外,errorMappingerrorCollectionMapping 方法有什么区别?
  • 我已经编辑了我的帖子。不同的是我的错字:$ 我做了一些更改,忘记在文本中更改它。实际上它的方法相同

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


【解决方案1】:

我现在觉得自己好傻……

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多