开始一个新的项目的时候,可能会遇到不同的后台.不同的后台也导致传参的方式不一样.很多时候接口调用不成功就是因为传参方式变化.(其他404,500等错误我们不做讨论,主要说明因为传参不对导致失败的现象)我参与了很多项目的开发.当然后台也不一样.每次第一次调用接口失败的时候,就一万个草泥马奔腾而过.因为很多时候跟咱们最常见的传参方式不一样.沟通起来麻烦.不知道的后台还以为你连个接口都不会调用.(不过脸皮要厚,调不通就得麻烦他.告诉自己,接口调用失败就是他的问题,哈哈) 不论是谁的问题,解决问题是关键.解决了第一次调用,封装好了就好用了. 我就把我遇到的几种调用说说
1.常见传参方式 传入字典.相信大家对这个是特别熟悉了
NSDictionary *dataDic = @{@"call_name":@"sp_tab_user_register",@"data":strDic};
直接传入AFN.的parameters 这个不多讲.
2. 后台告诉你说你传参要传这种格式 http://www.yiwen.cn/Y/ywz2/sp_yw_back_interface?inParameter={"call_name": "*****","data":*****}
下面是传参说明:
AFN传参的时候就是传字典,你传其他的也没有用.分析一下URL. 问号❓ 后面是inParameter.说明这个是个key. 至于{"call_name": "*****","data":*****} 很明显是一串字符串.也就是说我们需要创建一个字典,然后转换成字符串.并作为inParameter的value.NSDictionary *dic=@{
@"call_name":@"xxxxx",
@"data":@"xxxx"}
NSString* jsonStr = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:paraM options:0 error:nil] encoding:NSUTF8StringEncoding];
最终传入的参数:
NSDictionary *para = @{@"inParameter":jsonStr};
正确调用方式,代码截图:
第三种:后台告诉你要传入json数据.你直接使用常用的方式就会调用失败.我暂时没有利用AFN解决这个问题.后续再来解决更新文章.这里我推荐一个方法.这个json数据需要你传入在HTTPBody里面传过去,这样就可以调用成功.亲测有效.
正确调用方式,代码截图:
另外讲一下.最近调用接口的时候遇到了一个问题就是在网页上或者https post请求工具上都能正常请求获取数据,但是在项目里面用AFN调用就是回调失败.这里报的错误是 -1016
在进行网络请求时出现-1016 是因为只支持text/json,application/json,text/javascript你可以添加text/html或其他 这个地方报错的时候会告诉你缺少何种种类,仔细看看报错的信息.我在这里就是缺少了text/plain. 加上之后就完美解决了.text/plain 这个在错误信息里面也是出现了的.
instance.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"text/plain",nil];
有问题可直接咨询我,欢迎在评论区指出不足,或者优化建议 +QQ648731281 微信+17723566468 备注直接写