iosobjective-cexpressafnetworking-2

AFNetworking 2 - No response body when request fails


I am using AFNetworking 2 for an iOS project consuming a REST API. When requests fail, I am not able to get the body response.

I have seen this SO answer that says it can be retrieved from the userInfo dictionary. Unfortunately in my case I am not getting the NSLocalizedRecoverySuggestion key-value in my userInfo dictionary with the response body. Instead I see a AFNetworkingOperationFailingURLResponseErrorKey key.

My NSError log is

Error Domain=AFNetworkingErrorDomain Code=-1011 "Request failed: bad request (400)" UserInfo=0xbe471a0 {NSErrorFailingURLKey=http://***.com/api/users, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xbc60e80> { URL: http://***.com/api/users } { status code: 400, headers {
    Connection = "keep-alive";
    "Content-Length" = 85;
    "Content-Type" = "application/json; charset=utf-8";
    Date = "Thu, 24 Apr 2014 21:36:57 GMT";
    "X-Powered-By" = Express;
} }, NSLocalizedDescription=Request failed: bad request (400)}

As you can see from the headers, I am getting "Content-Type" = "application/json; charset=utf-8"; so this other answer doesn't apply either.

Actually the body response in Postman looks like this:

{"errorCode":100,"description":"There is already a registered user with that email."}

The backend is implemented by myself in Node + Express. I am not very experienced in backend development though, so maybe there is something I am missing or that I could change.

Does anyone know why I am not getting the response body in userInfo?


Solution

  • Quoting AFNetworking owner:

    (...) the recommended approach is to create a custom response serializer that translates response data in failing cases into NSError objects as appropriate.

    You can see this answer on another AFNetworking issue to see how to integrate it with your session manager, and this repository to see how to implement it.