美文网首页AFNetworking
关于AFNetworking的一些问题记录

关于AFNetworking的一些问题记录

作者: SHUTUP | 来源:发表于2016-01-02 19:26 被阅读3609次

前言

Afnetworking是ios开发中很常用的网络请求库。它的地址在这里
AFNetworking

遇到的问题

在使用Restful接口时,我们会大量的进行GET,POST请求。一般使用JSON格式作为数据交换的主要类型。最近在以POST方式上传大量结构类似的数据时,发现服务器接收到的格式不正确。

原始数据
{
contacts:[
          {
            name:'tom',age:5
          },
          {
            name:'jack',age:15
          },
          ....
         ]
}

结果服务器收到的数据,同名字段进行了合并处理,变成了类似下面的结构

这里有些遗忘了,而且可能不同的语言可能看起来也不一样,我们当时是以nodejs作为服务器的。
name:['tom','jack']
age:[5,15]

解决

查找问题时,我回忆起了在使用接口时,即使我们的参数格式是按照json格式进行的组装,但服务器收到的都是字符串类型。通过查看我们的代码,终于发现了一个存在很久的问题,那就是关于content-type的使用。
对于我们的项目而言,大部分接口都使用json数据,而我们没有对AFNetworking设置参数的content-type,那么AFNetworking会采用默认的设置application/x-www-form-urlencoded,这种方式,会导致我们的参数进行url编码,全部被转换成字符串形式。解决办法也很简单,修改默认的请求序列化器为json形式(对应的还有响应序列化器)。

AFHTTPRequestOperationManager* manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://192.168.0.106:8080"]];
manager.requestSerializer = [AFJSONRequestSerializer serializer];

注意

把content-type修改掉,前提当然是可以方便的获取数据,因为我用groovy(java也是)当服务器,它默认的获取参数方法,并不能直接解析出参数,需要从输入流中获取。

使用例外

进行上面的修改对于大部分接口都是可以正常工作的,但有些接口要求在进行参数传递的同时,附带二进制数据,比如通过POST修改个人资料。我目前没仔细测试,暂时还是使用旧multipart/form-data

参考

四种常见的 POST 提交数据方式

相关文章

网友评论

  • 雨洒潇湘:能否给写个Demo,我写上了manager.requestSerializer = [AFJSONRequestSerializer serializer]还是失败,acceptableContentTypes是怎么配置的啊?
  • 赤子知心:大哥帮忙看一下问题
    err:Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: internal server error (500)" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7fc90569c650> { URL: http://192.168.1.10:8080/web/Login? } { status code: 500, headers {
    Connection = close;
    "Content-Language" = en;
    "Content-Length" = 4135;
    "Content-Type" = "text/html;charset=utf-8";
    Date = "Sun, 17 Jul 2016 02:58:05 GMT";
    Server = "Apache-Coyote/1.1";
    } }, NSErrorFailingURLKey=http://192.168.1.10:8080/web/Login
    赤子知心:@四六不懂 后台的问题,和后台多调调
    f2558aaa2231:哥们你解决了吗?我也是你这个问题、求怎么解决的?QQ:522608370
  • 暖火儿火儿:真是的,解决了一个问题manager.requestSerializer = [AFJSONRequestSerializer serializer]; 就差了这句话

本文标题:关于AFNetworking的一些问题记录

本文链接:https://www.haomeiwen.com/subject/imiihttx.html