开发知识点iOS开发程序员

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 此处返回处理后的参数;
                
            }];
上一篇下一篇

猜你喜欢

热点阅读