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源码,可以看到在函数,

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

中,服务器端响应是被写入在error的userInfo中的,
这里写图片描述

我在这里打了一个断点,发现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];

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

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值