【问题标题】:How to get returned object on http 422 response on AFNetworking?如何在 AFNetworking 上的 http 422 响应中获取返回的对象?
【发布时间】: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


    【解决方案1】:

    访问传递给失败块的operation 的responseObject 属性。

    failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"JSON: %@", operation.responseObject); }];

    【讨论】:

    • 嗨,马特,我在添加日志时遇到了这个错误:在“AFHTTPRequestOperation *”类型的对象上找不到属性“responseJSON”
    • 那是一个错字。这是responseObject。
    • 但是当我将其更改为 NSLog(@"JSON: %@", operation.responseObject);
    • @matt 升级到 AFNetworking 2.0 并使用 AFHTTPSessionManager 代替 AFHTTPRequestOperation 后是否仍然可以获取错误响应代码(400、422 等)的响应对象?
    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多