Search code examples
iosjsonresponserestkit

Restkit JSON error response message from server


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 correctly? I have tried lots of things and could use some guidance - or please give an example of this.


Solution

  • For version 0.10.0 this response error can be mapped as follows:

    RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]];
    [errorMapping mapKeyPath:@"message" toAttribute:@"errorMessage"];
    [[[RKObjectManager sharedManager] mappingProvider] setErrorMapping:errorMapping];
    

    Requests that return an error will call the following delegate method:

    - (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error {
        NSArray *errorMessages = [[error userInfo] objectForKey:RKObjectMapperErrorObjectsKey];
        RKErrorMessage *errorMessage = [errorMessages objectAtIndex:0]; // First and only object in your case.
        NSString *message = [errorMessage errorMessage];
        NSInteger code = [[objectLoader response] statusCode];
        NSLog(@"ERROR: [%d] %@", code, message); // => ERROR: [401] Unauthorized
    }