AFNetWorking 請求復雜的參數(shù)使用總結(jié).

先看下復雜參數(shù)

 { "type":"1",
"sname":"\u6211\u7684\u8ba1\u5212",
"branchs":[{"btype":2,"blevel":0,"bname":"\u7a7a\u6c14\u80fd\u6c34\u8868","bid":263,"pflag":false}],
"shop_id":1,
"desc":"\u65e0",
"schedule_detail":[{"op_hour":16,"op_type":1,"op_min":2,"day_value":5,"day_type":1}]
}

一般的都是key Value的鍵值對.現(xiàn)在字典里面包含數(shù)組,數(shù)組中還有字典.

通常情況下我們使用下面代碼 就可以訪問了.

  AFHTTPRequestOperationManager *manager = [self getRequstManager];
[manager POST:url parameters:parmas success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {

} 

這里說明下默認后面怎么封裝我們的參數(shù):
默認會使用

AFURLRequestSerialization 這里類下的 請求系列化數(shù)據(jù)

截取這個類中一段源碼

switch (self.queryStringSerializationStyle) {
            case AFHTTPRequestQueryStringDefaultStyle:
                query = AFQueryStringFromParameters(parameters);
                //brand_id=0&city_id=0&date_type=2&end_date=2016-04&shop_id=1
                break;

        }

這里 parameters 就是我們傳遞的NSDictiony 參數(shù)
通過

AFQueryStringFromParameters(parameters);

轉(zhuǎn)化用&符號拼接成鍵值對形式的String
例如:

 brand_id=0&city_id=0&date_type=2&end_date=2016-04&shop_id=1

這里注意HTTP request 請求 的contentType是 application/x-www-form-urlencoded

[mutableRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

所以,如果我們傳遞復雜的NSDictionary 字典中的value還有數(shù)組,數(shù)組中還有字典,
封裝的時候,會將參數(shù)全部壓平.
例如:

branchs%5B%5D%5Bbid%5D=263&
branchs%5B%5D%5Bblevel%5D=0&
branchs%5B%5D%5Bbname%5D=%E7%A9%BA%E6%B0%94%E8%83%BD%E6%B0%B4%E8%A1%A8&branchs%5B%5D%5Bbtype%5D=2&
branchs%5B%5D%5Bpflag%5D=0&
desc=%E6%97%A0&
schedule_detail%5B%5D%5Bday_type%5D=1&
schedule_detail%5B%5D%5Bday_value%5D=5&
schedule_detail%5B%5D%5Bop_hour%5D=17&
schedule_detail%5B%5D%5Bop_min%5D=40&
schedule_detail%5B%5D%5Bop_type%5D=1&
shop_id=1&
sname=%E6%88%91%E7%9A%84%E8%AE%A1%E5%88%92&type=1

branchs%5B%5D%5Bbid%5D 這串編碼后就是branchs[0][key] 就是說會將數(shù)組中的第一個元素中key 成為我們的鍵值對中的key.

所以采用 默認的這種傳遞方式,會出問題.

一般這種復雜的參數(shù)傳遞,需要使用 json傳值

下面說下怎么使用json HTTP Request

 AFHTTPRequestOperationManager *manager = [self getRequstManager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager POST:url parameters:parmas success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {
}

這樣,就可以了.在 AFJSONRequestSerializer 對參數(shù)序列化的時候,就設置contentType為json了.

[mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

不過這里注意的是服務端獲取數(shù)據(jù)的方法不一樣,這樣切換,服務端有可能讀不到數(shù)據(jù).
一種是使用post的方法讀取,
一種是使用requestBody讀取(具體我也不清楚,后端開發(fā)人告訴我的,后端開發(fā)用的是python)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • AFHTTPRequestOperationManager 網(wǎng)絡傳輸協(xié)議UDP、TCP、Http、Socket、X...
    Carden閱讀 5,321評論 0 12
  • 今天天變了臉,雖然有天氣預報,但是昨天的攝氏二十以上和今天的十度以下的大反差還是讓人很不舒服,收起的厚棉衣又得拿出...
    竇家香閱讀 140評論 0 0
  • 結(jié)婚是一件幸福的事情,因為意味著你找到了人生的另一半,并決定與之相伴一生。而婚禮,是大多數(shù)人結(jié)婚中的一個重...
    在陸地生活的海豚閱讀 330評論 0 1
  • 大家聽到「價值」這兩個字可能感覺很現(xiàn)實,常聽到「沒有利用價值就被淘汰,怎么那么現(xiàn)實?」這種話,是因為大家把「價值」...
    AIOSC兩性關系策略師曾國銘閱讀 1,235評論 0 1

友情鏈接更多精彩內(nèi)容