AFNetworking错误码-1011

今天写iOS代码和后台连调的过程中,发现服务器返回给我bad request之后,无法解析服务器返回值。
我以为是服务器问题,于是起了一个play framework工程,写了一个很简单的打印客户端请求,并返回一个json字符串到客户端的工程。

代码实例如下:

public Result log(){
   JsonNode j = request().body().asJson();
   System.out.print("数据:" + j);

   return badRequest(j);
}

routes配置:

POST    /v1/events   controllers.TestController.log()

网络请求在这里使用的是AFNetworking框架,发送一个POST请求之后,模拟后台返回一个badRequest,返回值中携带一个json。这个时候发现请求都是报errorCode -1011的错误,查询-1011对应的错误码可以看到是bad response错误。

代码中断点看到到返回值:
AFNetworking错误码-1011_第1张图片

阅读AFNetworking源码,可以看到在函数,

- (void)URLSession:(__unused NSURLSession *)session
              task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error

中,服务器端响应是被写入在error的userInfo中的,
AFNetworking错误码-1011_第2张图片

我在这里打了一个断点,发现userInfo中的,com.alamofire.networking.task.complete.serializedresponse对应key值是和服务器返回的数据相同的,
这里写图片描述

我们再回去看最上边回调中拿到的NSError的值,会发现key值com.alamofire.serialization.response.error.data对应下的是一组二进制的数据,我抱着试一试的态度,将这组二进制数据转成NSDictionary打印了一下,完全就是服务器返回的badRequest中的body值。

虽然结果很简单,但是在Google和百度的过程中都没有找到很好的解决方案,大多是要求http的header中content-type要设置为json。但是很明显我是设置过的

self.manager = [AFHTTPSessionManager manager];
self.manager.requestSerializer = [AFJSONRequestSerializer serializer];
self.manager.responseSerializer = [AFJSONResponseSerializer serializer];

所以对于这种情况,我们可以通过查看源码,根据源码来解读分析。

你可能感兴趣的:(iOS)