iOS AFNetworking用JSON类型数据作为请求body发送POST请求

之前发送请求传给后台的参数都是 NSDictionary 类型的,最近后台要求传参数是 json 类型。

代码如下:

// 请求头
NSString *accessPath = @"http://xxx/getList";
// 请求参数字典
NSDictionary *params = @{@"type":@"1", @"name":@"2"};

NSLog(@"发送请求url=%@,params=%@",accessPath,params);

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:accessPath parameters:params error:nil];
request.timeoutInterval = 10.f;
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];

NSURLSessionDataTask *task = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
    NSLog(@"-----responseObject===%@+++++",responseObject);
    if (!error) {
        if ([responseObject isKindOfClass:[NSDictionary class]]) {
            // 请求成功数据处理
        } else {
            
        }
    } else {
        NSLog(@"请求失败error=%@", error);
    }
}];

[task resume];

说明:

找了一圈无果,最后在 AFNetworking请求序列化 介绍里面找到了,图样图森破啊。翻译如下:

AFNetworking 请求序列化:
请求序列化通过请求的URL字符串创建请求,编码参数作为查询字符串或HTTP体。以下面请求为例:

NSString *URLString = @"http://example.com";
NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]};
  • 1、查询字符串参数编码
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil];
GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3
  • 2、URL表单参数编码
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
POST http://example.com/Content-Type: application/x-www-form-urlencodedfoo=bar&baz[]=1&baz[]=2&baz[]=3
  • 3、JSON参数编码
[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
POST http://example.com/Content-Type: application/json{"foo": "bar", "baz": [1,2,3]}

第三种就是我们要求的,搞定~

AFNetworking 请求序列化
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,948评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,245评论 4 61
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,721评论 2 7
  • 当我意识到自己开始用多个角度去思考、看待一件事时,才突然发觉,似乎有些什么东西已经悄悄生长在我的身体里,或许这就是...
    摩羯陌上花开阅读 122评论 0 0
  • 林正碌老师对于画画的疑惑解答 林老师 福建人在福建平南县四个古村开展人人都是艺术家的公益活动,是哲学家,艺术家,出...
    金晶花阅读 1,113评论 0 3