Le service REST que je consomme dispose de deux modes de réponse différents.Mappage basé sur la valeur de la réponse JSON dans RestKit
{
success: true,
data: { //all data goes here}
}
ou
{
success: false,
error: "Error",
message: "some message"
}
Je suis en train de configurer RESTKit pour retourner un certain objet d'erreur que j'ai créé pour stocker la réponse d'erreur et une classe configurée (basé sur l'URL) pour la réussite = vrai cas.
J'essaye d'employer un RKDynamicMapping pour accomplir ceci basé sur la valeur de "succès".
- (RKDynamicMapping *)createCompatibleMapping:(NSDictionary *)successDictionary withClass:(Class) class{
NSMutableDictionary *withSuccessDictionary = [NSMutableDictionary dictionaryWithDictionary:successDictionary];
[withSuccessDictionary addEntriesFromDictionary:@{@"success" : @"success"}];
RKObjectMapping *successMapping = [RKObjectMapping mappingForClass:class];
[successMapping addAttributeMappingsFromDictionary:withSuccessDictionary];
RKObjectMapping *restErrorMapping = [RKObjectMapping mappingForClass:[RESTErrorObject class]];
[restErrorMapping addAttributeMappingsFromDictionary:@{@"success" : @"success", @"error" : @"errorString", @"message" : @"message"}];
RKDynamicMapping *dynamicMapping = [RKDynamicMapping new];
[dynamicMapping addMatcher:[RKObjectMappingMatcher matcherWithKeyPath:@"success" expectedValue:[NSNumber numberWithBool:YES ] objectMapping:successMapping]];
[dynamicMapping addMatcher:[RKObjectMappingMatcher matcherWithKeyPath:@"success" expectedValue:[NSNumber numberWithBool:NO ] objectMapping:restErrorMapping]];
return dynamicMapping;
}
ajouter ensuite à un descripteur de réponse comme tel:
RKResponseDescriptor * cardDetailsResponseDescriptor2 = [RKResponseDescriptor responseDescriptorWithMapping:cardDetailsResponseMapping method:RKRequestMethodGET
pathPattern:@"services/details/:cardNumber" keyPath:@"data"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[_objectManager.router.routeSet addRoute:[RKRoute routeWithName:@"getCardDetailsRoute" pathPattern:@"services/details/:cardNumber" method:RKRequestMethodGET]];
Je puis appeler
[self.objectManager getObjectsAtPathForRouteNamed:@"getCardDetailsRoute" object:card parameters:@{@"token" : authToken} success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
Je sais que c'est un grand message et peut-être difficile à comprendre . J'apprécie votre patience: D Donc confus sur ce que je devrais faire.
La modification de l'API REST n'est pas vraiment une option.
Qu'est-ce que 'cardDetailsResponseMapping'? Le descripteur de réponse doit utiliser 'dynamicMapping'. – Wain
cardDetailsResponseMapping est un mappage dynamique. – bobber205
'un' mappage dynamique, différent de celui que vous avez montré dans le code? – Wain