Restkit json error response msg from server

Neru-J picture Neru-J · Mar 23, 2012 · Viewed 7.3k times · Source

I have used many hours on how to solve this issue. Im using Restkit 0.9.3 with Object Mapping 2.0. All data is in JSON. I can make GET, POST, PUT and DELETE operations correctly, it's the response body I dont catch and map corretly..

So my problem is that my restful api is returning errors when something goes wrong. I want to map those errors with restkit, fx this error is returned:

{ "code": "401", "message": "Unauthorized" }

How do I map this json correct? I have tried lots of things and could use some guideness - or please give an example of this.

Answer

Brenden picture Brenden · May 31, 2013

For RestKit v0.20

assuming your HTTP body is:

{"error": "..."}

you create an the mapping and descriptor:

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

[errorMapping addPropertyMapping: [RKAttributeMapping attributeMappingFromKeyPath:@"error" toKeyPath:@"errorMessage"]];
RKResponseDescriptor *errorResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)];
[objectManager addResponseDescriptor:errorResponseDescriptor];

and then you can access it from your failure block:

failure:^(RKObjectRequestOperation *operation, NSError *error) {
                NSLog(@"errorMessage: %@", [[error userInfo] objectForKey:RKObjectMapperErrorObjectsKey]);
            }

This uses the built-in RKErrorMessage class, though you can create your own custom class with additional fields.