Ich schreibe eine iOS-App, die mit einem Dienst interagiert, um das Profil eines Benutzers zu aktualisieren. Um den Namen eines Benutzers zu aktualisieren, legt der iOS-App eine Anfrage mit einem Körper aus folgendem Format:Kann keine erfolgreiche Antwort von 204 verarbeiten und fehlerhafte Antwort mit RestKit korrekt zuordnen
{"name" : {"first" : "FIRSTNAMEGOESHERE", "lastName":"LASTNAMEGOESHERE"}}
In dem Fall, dass der Antrag Körper gültig ist (dh sowohl ein Vor- und Nachnamen werden zur Verfügung gestellt), Der Dienst gibt einen Statuscode 204 (Kein Inhalt) und einen leeren Antworttext zurück.
In dem Fall, dass der Antrag Körper ungültig ist (zB Vorname fehlt, etc.), wird der Dienst einen Statuscode 400 zurückgeben und einen Antworttext in folgendem Format:
{"code":"ERRORCODEHERE"}
Der Die iOS-App verwendet RestKit und ich konnte nicht herausfinden, wie ich es erhalten kann, um den Erfolgs- und Fehlerfall richtig zu behandeln. Wenn ich diese verwenden:
- (void)updateUserName
{
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[[NSURL alloc] initWithString:@"http://someqaserver:8080"]];
[objectManager setRequestSerializationMIMEType:RKMIMETypeJSON];
RKObjectMapping *userMapping = [RKObjectMapping requestMapping];
[userMapping addAttributeMappingsFromDictionary:@{@"firstName" : @"first", @"lastName" : @"last"}];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userMapping objectClass:[OurUser class] rootKeyPath:@"name"];
[objectManager addRequestDescriptor:requestDescriptor];
[objectManager putObject:[OurUser getCurrentUser]
path:@"/mobile/profile/name"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *result)
{
NSLog(@"Success!");
}
failure:^(RKObjectRequestOperation *operation, NSError *error)
{
NSLog(@"Fail!");
}];
}
Das ist offensichtlich nicht für den Fehlerfall funktioniert, aber es erfolgreich den Erfolg Block in dem Fall ausführt, wo ein 204 vom Server zurückgegeben wird.
Wenn ich den folgenden Code vor dem Aufruf putObject, die Fehlerbehandlung Werke hinzufügen, aber jetzt ist der gültige 204 Fall wird ein Ausfall als:
RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[ServiceError class]];
[errorMapping addAttributeMappingsFromDictionary:@{@"code" : @"errorCode"}];
RKResponseDescriptor *errorDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)];
[objectManager addResponseDescriptor:errorDescriptor];
Dies scheint da die akzeptiert HTTP-Statuscodes geschehen sind nun eingestellt zu denen der Antwort-Deskriptoren zur Verfügung gestellt und 204 ist nicht einer von ihnen (oder vielleicht ist es etwas anderes?)
wie kann ich es bekommen, dass so: 1.), wenn ein 204 zurückgeführt wird, ist es als Erfolg gesehen 2.) Wenn eine 4XX zurückgegeben wird, wird dies als Fehler angesehen und der Fehlercode ist korrekt auf meinen Servi abgebildet ceError Objekt?
Vielen Dank im Voraus für jede Hilfe, die Sie zur Verfügung stellen können.
Ich glaube, du falsch verstanden. Ich weiß, dass 204 eine gültige Antwort ist. Das Problem bestand darin, dass dieser Code 204 als Erfolg betrachtete, während gleichzeitig der entsprechende Antwortdeskriptor hinzugefügt wurde, so dass Fehlercodes zurückgemeldet wurden, wenn eine 400 empfangen wurde. – Kathleen