iOS AFN网络请求参数类型的变换(参数可用字符串)
2016-11-04 本文已影响0人
RichardZhao
在正常使用AFN网络请求的时候,请求参数params基本都是一个字典类型,AFN会把字典处理成一个json格式的二进制上传到服务器。服务器接受到的是一个json类型的数据。
如果服务器想要接受的数据是就是一个字符串我们该怎么做呢?
解决办法如下:
/**
网络请求工具类实例化方法
工具类继承与AFHTTPSessionManager
*/
+ (instancetype)sharedTools
{
static HttpHelper *tools;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (!tools) {
// 初始化
tools = [HttpHelper new];
// 设置请求参数数据类型 (默认二进制)
tools.requestSerializer = [AFHTTPRequestSerializer serializer];
// 设置响应结果的数据类型
tools.responseSerializer = [AFHTTPResponseSerializer serializer];
// 设置添加响应结果可接受的类型
tools.responseSerializer.acceptableContentTypes = [tools.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
// 处理请求体参数
[tools.requestSerializer setQueryStringSerializationWithBlock:^NSString * _Nonnull(NSURLRequest * _Nonnull request, id _Nonnull parameters, NSError * _Nullable __autoreleasing * _Nullable error) {
return 此处返回处理后的参数;
}];
};
});
return tools;
}
解决此问题主要是通过此方法实现:
// 处理请求体参数 (每次网络请求都会走此方法,默认对parameters是不进行处理的,需要重写)
[tools.requestSerializer setQueryStringSerializationWithBlock:^NSString * _Nonnull(NSURLRequest * _Nonnull request, id _Nonnull parameters, NSError * _Nullable __autoreleasing * _Nullable error) {
/**
1.在此方法中我们可以获取到请求参数parameters
2.然后我们可以对参数进行加密,压缩等处理
3.处理后的结果就是一个字符串了
4.AFN会将返回的参数,转换成二进制上传到服务器
5.服务器接受到的就是下面返回的参数,然后服务器在对获取到的字符串进行解压,解密,转换为Json
*/
return 此处返回处理后的参数;
}];