2013-01-07 36 views
1

我成功使用RESTKit来访问Web服务。但我有问题将服务器错误(如404,403 ...)映射到RESTKit的标准RKErrorMessage类。比方说,我从我的服务提出了以下JSON响应一个403个状态码在一起:使用RESTKit映射服务器错误

{"errors":{"message":"Some error message"}} 

在我的iOS应用程序,我尝试错误的帮助下图:

RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class 
[errorMapping addPropertyMapping:[RKAttributeMapping 
    attributeMappingFromKeyPath:@"message" toKeyPath:@"message"]]; 

statusCodes4xx = RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError); 

errorDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:notecardMapping 
        pathPattern:nil keyPath:@"errors" statusCodes:statusCodes4xx]; 

但所有我get是从RESTkit发出的错误:

Failed mapping operation: No mappable values found for any of the attributes or relationship mappings 

我的错在哪里?例如,它在描述符中只是一个错误的路径?

+0

我认为你想'@“errors.message”'作为你的密钥 – mkral

+0

也不应该是'addAttributeMapping'? – mkral

+0

谢谢你的回答。不幸的是,“errors.message”也不起作用。我的代码与RESTKit网站上描述的解决方案非常相似:[link](https://github.com/RestKit/RestKit)。但是他们不会为他们的例子发布相应的服务器响应。 – Benni

回答

6

您似乎在回复描述符中使用了notecardMapping而不是errorMapping。试试这个:

RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]]; 

[errorMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"errorMessage"]]; 

RKResponseDescriptor *errorDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping 
                       pathPattern:nil 
                        keyPath:@"errors.message" 
                       statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)]; 

[manager addResponseDescriptorsFromArray:@[errorDescriptor]]; 
+0

的确,应该在响应描述符内进行errorMapping。此外,在描述符中作为keyPath的“erors”实际上已经足够了。非常感谢! – Benni