我正在将AFNetwoking v 2.2.4用作iOS上的网络库。它假定非http 2xx(以http 200为成功)响应为错误,并引发如下错误块:
NSError *error= nil;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error:&error];
NSString *connectionString = [NSString stringWithFormat:@"%@%@",SERVER_URL, RESOURCE_URL_USER_SIGNUP];
NSURL *url = [NSURL URLWithString:connectionString];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:jsonData];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"response object: %@", (NSDictionary *)responseObject);
[delegate userSignUpCompletedWithResponse:responseObject];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
[delegate userSignUpFailedWithError:error];
NSString *errorBodyMessage = [[error userInfo] objectForKey:@"NSLocalizedRecoverySuggestion"];
NSLog(@"error message: %@", errorBodyMessage);
}];
[operation start];
在这里,当http响应为200时,一切都按预期工作。我在服务器端有一个ROR编写的REST API。对于用户注册,如果所有字段均具有有效值,则它将发送200状态,但是如果数据无效(例如已接收电子邮件),则发送状态。在这种情况下,服务器使用JSON发送422状态和错误消息。我需要跟踪错误消息并将其显示给移动用户,但无法在错误块中获取消息对象。我已经记录了整个错误,但是没有找到从服务器返回的对象。使用AFNetworking进行非2xx http响应时,如何获取JSON对象?
最佳答案
访问传递给故障块的responseObject
的operation
属性。
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"JSON: %@", operation.responseObject);
}];
关于ios - 如何在AFNetworking的http 422响应上获取返回的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24742064/