Restkit 失败:访问返回的 json

Posted

技术标签:

【中文标题】Restkit 失败:访问返回的 json【英文标题】:Restkit failure: getting access to the json returned 【发布时间】:2013-11-01 22:27:23 【问题描述】:

我正在使用 Restkit .20 并尝试获取在失败块中返回的错误对象。我在下面都尝试过,并且都为错误对象返回(null)。

RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];
[errorMapping addPropertyMapping:
 [RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"errorMessage"]];
RKResponseDescriptor *errorDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping
                                                                                pathPattern:nil
                                                                                    keyPath:@"error" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)];
[self.objectManager addResponseDescriptorsFromArray:@[errorDescriptor]];

RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];
[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:@"error" toKeyPath:@"errorMessage"]];
[self.objectManager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:errorMapping pathPattern:nil keyPath:@"error" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)]];

这是在我的失败块中,它打印出“errorMessage: (null)”

 failure:^(RKObjectRequestOperation *operation, NSError *error) 

        NSLog(@"errorMessage: %@", [[error userInfo] objectForKey:RKObjectMapperErrorObjectsKey]);

这是从服务器返回的 JSON 中的内容。


    "status": "FAIL",
    "user_errors": null,
    "error": "Credit card type is not accepted by this merchant account.",
    "user": null

【问题讨论】:

您的第一组代码看起来不错。映射跟踪日志说明了什么以及仅记录错误本身(不仅仅是用户信息的一部分)时会得到什么? ...ErrorDomain Code=1001 “在搜索的关键路径中找不到可映射的对象表示。” UserInfo=0xadd5ce0 DetailedErrors=( ), NSLocalizedFailureReason=映射操作无法在搜索的关键路径中找到任何嵌套对象表示:用户输入到映射器的表示被发现包含以下关键路径的嵌套对象表示:代码,错误 这可能表明您错误地配置了映射的关键路径。,NSLocalizedDescription=在搜索的关键路径中未找到可映射的对象表示。,keyPath=null 这是否取决于标头错误代码?标头返回 201。但数据是我在原帖中提到的 JSON。 【参考方案1】:

HTTP 状态代码 201 是成功代码,而不是错误代码,因此不会尝试您的错误映射(因为 statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError))。

因此,更新服务器以发送适当的状态代码。如果您更新响应描述符以检查错误的“成功”响应,我认为它会起作用。

【讨论】:

我应该返回什么响应并返回 401?我需要回复说,您没有回复正确的信息。 您可以返回任何您想要的错误代码和正文数据的组合,只需定义它并对其进行编码。

以上是关于Restkit 失败:访问返回的 json的主要内容,如果未能解决你的问题,请参考以下文章

Dojo + DataGrid + JsonRest + 自定义 json

Restkit:重试失败的请求

xCode 4.3 使用 RestKit 归档项目失败:#import <RestKit/RestKit.h> Not found

Restkit“*** -[RKManagedObjectMapping initWithEntity:] 中的断言失败”

RestKit 连接失败委托

IOS - RESTKIT - 以多种方式映射结果