使用AFN進行序列化處理
1.AFN它內部默認把服務器響應的數據當做json來進行解析,所以如果服務器返回給我的不是JSON數據那么請求報錯,這個時候需要設置AFN對響應信息的解析方式。AFN提供了三種解析響應信息的方式
分別是:
- 1)
AFXMLParserResponseSerializer----XML
-
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);
}];
}