I'm using AFHTTPRequestOperationManager
for a POST
request. Now I'm deliberately entering incorrect information to handle a 400
error code. Now, the web service actually returns a JSON
with a message explaining to the user what they've done wrong. I would very much like to get this JSON
to display the message in a UIAlertView
. However, the failure block of:
[operationManager POST:ServerURL parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success: Status Code: %d", operation.response.statusCode);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failed: Status Code: %d", operation.response.statusCode);
}];
doesn't pass down a responseObject like the one in the success block. So does anyone know how I can access the JSON returned by the Web Service with the 400 error? The NSError *error
simply gives me Request failed: bad request (400)
and not the JSON returned.
Any help would be appreciated,
Mike
Looking at the code for - responseObject
, it appears that an HTTP error prevents it from being populated. You can grab the responseData
directly and parse it yourself, but I would say this is either a bug or a good enhancement request. (It looks like - responseObject
probably should be checking self.responseSerializationError
, not self.error
, when deciding if it should try to build a response object.)
You can do either of these solutions
1) Set the acceptableStatusCodes
to accept your 400 statusCode, and you handle in the success block
manager.responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndex:400];
2) Create a custom ResponseSerializer, like this JSONResponseSerializerWithData, to insert the responseObject into the NSError userInfo, and handle in the failure block
Pro tip: AFNetworking is opensource, just take a look at AFHTTPRequestOperation for methods
setCompletionBlockWithSuccess:failure:
responseObject
error
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With