iOS之使用AFN進行序列化處理(5)


使用AFN進行序列化處理

1.AFN它內部默認把服務器響應的數據當做json來進行解析,所以如果服務器返回給我的不是JSON數據那么請求報錯,這個時候需要設置AFN對響應信息的解析方式。AFN提供了三種解析響應信息的方式

分別是:

  • 1)AFXMLParserResponseSerializer----XML
    1. AFHTTPResponseSerializer---------默認二進制響應數據
  • 3)AFJSONResponseSerializer---------JSON

2.還有一種情況就是服務器返回給我們的數據格式不太一致(開發者工具Content-Type:text/xml),那么這種情況也有可能請求不成功。

解決方法:

  • 1) 直接在源代碼中修改,添加相應的Content-Type
  • 2) 拿到這個屬性,添加到它的集合中

3.相關代碼

-(void)srializer
{
    //1.創建請求管理者,內部基於NSURLSession
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    /* 知識點1:設置AFN采用什么樣的方式來解析服務器返回的數據*/

    //如果返回的是XML,那么告訴AFN,響應的時候使用XML的方式解析
    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

    //如果返回的就是二進制數據,那么采用默認二進制的方式來解析數據
    //manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    //采用JSON的方式來解析數據
    //manager.responseSerializer = [AFJSONResponseSerializer serializer];

    /*知識點2 告訴AFN,再序列化服務器返回的數據的時候,支持此種類型
    [AFJSONResponseSerializer serializer].acceptableContentTypes = [NSSet setWithObject:@"text/xml"];

    //2.把所有的請求參數通過字典的方式來裝載,GET方法內部會自動把所有的鍵值對取出以&符號拼接並最后用?符號連接在請求路徑后面
    NSDictionary *dict = @{
                           @"username":@"223",
                           @"pwd":@"ewr",
                           @"type":@"XML"
                           };

    //3.發送GET請求
    [manager GET:@"http://120.25.226.186:32812/login" parameters:dict success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {

        //4.請求成功的回調block
        NSLog(@"%@",[responseObject class]);
    } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {

        //5.請求失敗的回調,可以打印error的值查看錯誤信息
        NSLog(@"%@",error);
    }];
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM