ios - 如何在AFNetworking的http 422响应上获取返回的对象?

标签 ios afnetworking-2

我正在将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对象?

最佳答案

访问传递给故障块的responseObjectoperation属性。
failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"JSON: %@", operation.responseObject); }];

关于ios - 如何在AFNetworking的http 422响应上获取返回的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24742064/

相关文章:

ios - 尝试发送邮件和应用程序崩溃

iphone - UIKit 状态保存不恢复滚动偏移

ios - 取消 AFNetworking 2.0 成功 block

iOS 应用程序在调用 Web 服务最佳实践之前确保互联网可用

ios - 如何获取 AFNetworking 的 UIImageView 类别存储的缓存图像?

objective-c - NSManagedObjectContext的performBlock方法是否保证操作顺序?

ios - FBSDKLoginCore 架构 armv7 的 undefined symbol

android - 如何使用gles创建ios模糊效果

ios: AFNetworking 在 info.plist 中指定基本 url

ios - AFNetworking 更改重定向请求从 GET 到 POST