我試圖從AFNetworking 1.3遷移項目到AFNetworking 2.0。問題從AFNetworking 1.3遷移到AFNetworking 2.0
在AFNetworking 1.3的項目,我有這樣的代碼:
- (void) downloadJson:(id)sender
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://myServer/api/call?param1=string1¶m2=string2"]];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
// handle success
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"%ld", (long)[response statusCode]);
NSDictionary *data = JSON;
NSString *errorMsg = [data objectForKey:@"descriptiveErrorMessage"];
// handle failure
}];
[operation start];
}
當客戶端發送的格式不正確或不正確參數,服務器會返回一個400錯誤,包括JSON具有「descriptiveErrorMessage一個url 「我在失敗區讀到。我使用這個「descriptiveErrorMessage」來確定URL的錯誤,並在適當的時候給用戶留言。
的代碼從AFNetworking 2.0項目看起來是這樣的:
- (void)downloadJson:(id)sender
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://myServer/api/call?param1=string1¶m2=string2"]];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
// handle success
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// any way to get the JSON on a 400 error?
}];
[operation start];
}
在AFNetworking 2.0項目,我看不出有什麼辦法讓JSON閱讀「descriptiveErrorMessage」服務器發送。我可以從操作中得到NSHTTPURLResponse的響應頭文件,但是就我所能得到的,也許我錯過了一些東西。
有沒有辦法讓失敗塊中的JSON?如果沒有,任何人都可以提出一個更好的方法來做到這一點
在此先感謝您對此問題的任何幫助。
謝謝@sergio,這工作。我錯過了responseData屬性。它來自NSData,但我將其序列化爲JSON並能夠從服務器檢索消息。 – Paul