国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

IOS AFNetworking的Post失敗及requestSerializer的正確使用

2019-10-21 18:46:27
字體:
供稿:網(wǎng)友

IOS  AFNetworking的Post失敗及requestSerializer的正確使用

前言:

最近接手一個項目,因為之前的項目里面POST請求用的是ASI的,我就想著給替換成AFNetworking,但是在替換過程中遇到了一個大坑,解決了半天才發(fā)現(xiàn)是一個小問題,下面將我的問題給大家分享一下:

錯誤描述和發(fā)現(xiàn)過程

Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set."

看了錯誤描述后,根據(jù)它的描述是因為返回的json數(shù)據(jù)格式不對,不是json的,我就去修改AFNetworking的responseSerializer返回的序列化器,發(fā)現(xiàn)怎么改怎么不對,各種嘗試無果之后,我打印了一下元數(shù)據(jù),發(fā)現(xiàn)返回的居然是Html格式的消息,消息內(nèi)容大概是服務(wù)器請求失敗了,好吧,搞了半天是我請求錯誤了。我驗證半天發(fā)現(xiàn)參數(shù)沒什么問題啊,于是我就打印了一下用ASI請求body的數(shù)據(jù)發(fā)現(xiàn)是這樣子的:mid=10&method=userInfo&dateInt=20160818,我再打印了一下我用AFNetworking拼接成的body的數(shù)據(jù)格式居然是這樣子的{"mid":"11","method":"userInfo","dateInt":"20160818"},好吧,現(xiàn)在我知道是哪里有問題了,因為之前傳的參數(shù)都是json格式的所以沒問題,誰知道這個服務(wù)器接受的數(shù)據(jù)不是json格式的,所以請求失敗了。那我就需要修改AFNetworking的requestSerializer了。

requestSerializer

關(guān)于 requestSerializer它就是AFNetworking參數(shù)編碼的序列化器,它一共有三種編碼格式:

  1. AFHTTPRequestSerializer:第一種是普通的http的編碼格式也就是mid=10&method=userInfo&dateInt=20160818,這種格式的。
  2. AFJSONRequestSerializer:第二種也是json編碼格式的,也就是編碼成{"mid":"11","method":"userInfo","dateInt":"20160818"}
  3. AFPropertyListRequestSerializer:第三種沒用過,但是看介紹接編碼成pislt格式的參數(shù)

看了上面的介紹應(yīng)該能明白到底該如何修改了,下面貼上我的修改過程。

解決辦法

修改前:

_sharedCBClient = [[AFAppCBNetAPIClient alloc] initWithBaseURL:baseURL];    //拼接參數(shù)的序列化器,使用的錯誤的序列化器    _sharedCBClient.requestSerializer = [AFJSONRequestSerializer serializer];    //返回數(shù)據(jù)的序列化器    _sharedCBClient.responseSerializer = [AFJSONResponseSerializer serializer];

修改后:

_sharedCBClient = [[AFAppCBNetAPIClient alloc] initWithBaseURL:baseURL];    //拼接參數(shù)的序列化器,使用的正確的序列化器    _sharedCBClient.requestSerializer = [AFHTTPRequestSerializer serializer];    //返回數(shù)據(jù)的序列化器    _sharedCBClient.responseSerializer = [AFJSONResponseSerializer serializer];_sharedCBClient = [[AFAppCBNetAPIClient alloc] initWithBaseURL:baseURL];    //拼接參數(shù)的序列化器,使用的正確的序列化器    _sharedCBClient.requestSerializer = [AFHTTPRequestSerializer serializer];    //返回數(shù)據(jù)的序列化器    _sharedCBClient.responseSerializer = [AFJSONResponseSerializer serializer];

到這里我的問題也就解決了,一個小小的問題困擾了很久真是不應(yīng)該,以后應(yīng)該多跟后臺溝通溝通,要不出錯了也不知道錯在哪里,

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關(guān)教程知識閱讀請移步到IOS開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 静宁县| 曲阜市| 渭源县| 孝义市| 乐平市| 七台河市| 阳东县| 临汾市| 蚌埠市| 新兴县| 湘阴县| 四川省| 罗甸县| 锦屏县| 蒲江县| 汪清县| 满城县| 荃湾区| 西城区| 宜州市| 东港市| 德安县| 红原县| 伊吾县| 永安市| 五华县| 久治县| 射阳县| 肥城市| 磐石市| 佛学| 广宁县| 临武县| 临江市| 亚东县| 广南县| 陕西省| 安龙县| 威远县| 长武县| 罗甸县|