问题描述 : 使用AFN发送网络请求时, 服务器返回的响应体responseObject默认是JSON数据,并且AFN已经帮我们做好了反序列处理, 返回的responseObject实际是一个经过反序列处理的OC对象.
如果服务器返回的是JSON数据,那么AFN会帮我们做反序列处理;但如果返回的数据是XML呢 ? 或者既不是JSON ,也不是XML ,而且其他数据类型又该如何处理 ? 本文将探讨后面两种情况.
1,服务器返回XML数据
这里我使用AFN发送一个简单的GET请求来说明;
1.创建会话管理者对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSDictionary *dict = @{@"type":@"XML"};
2.实际上AFN给我们封装了一个设置序列化方法的属性
//设置AFN的序列化方法--XML
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
3.发送GET请求
[manager GET:@"http://xxx" parameters:dict progress:nil success:
^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"成功---%@---%@",responseObject,[responseObject class]);
//得到XML解析器
NSXMLParser *parser = responseObject;
//设置代理
parser.delegate = self;
//开始解析
[parser parse];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失败---%@",error);
}];
4.代理方法
#pragma mark NSXMLParserDelegate
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
attributes:(NSDictionary<NSString *,NSString *> *)attributeDict {
NSLog(@"elementName:%@--%@",elementName,attributeDict);
}
P.S : 更多关于XML数据解析,请点击--XML数据解析
2,服务器返回其他类型数据(非JSON非XML)
1.创建会话管理者对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
2.如果服务器返回的数据既不是JSON也不是XML
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
3.发送GET请求
[manager GET:@"http://xxx.png" parameters:nil
progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"成功---%@---%@",responseObject,[responseObject class]);
UIImage *image = [UIImage imageWithData:responseObject];
self.imageView.image = image;
//注意, GET请求默认是在主线程中执行的
NSLog(@"%@---",[NSThread currentThread]);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失败---%@",error);
}];