【发布时间】:2014-07-14 17:14:12
【问题描述】:
我在 iOS 上使用 AFNetwoking v 2.2.4 作为网络库。它假定非 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 状态,但如果数据无效,例如 email has been taken;在这种情况下,服务器以 JSON 格式发送带有错误消息的 422 状态。我需要跟踪错误消息并将其显示给移动用户,但我无法在错误块中获取消息对象。我已经记录了整个错误,但没有找到从服务器返回的对象。如何在使用 AFNetworking 的非 2xx http 响应时获取 JSON 对象?
【问题讨论】:
标签: ios afnetworking-2