使用AFNetworking3.0后网络请求由原来的AFHTTPRequestOperationManager变为AFHTTPSessionManager。一般的Post请求变成了这样:

NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"phoneNumber"] = @"18000000000";
    params[@"password"] = @"123";

AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
    [session POST:@"" parameters:@"" progress:params success:nil failure:nil];

最近后台要求我们提交post请求使用JSON格式,如{"password":"123","phoneNumber":"18000000001"};

使用原有请求方式请求报错error:Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: service unavailable (503)"。如图:

无意间发现MJExtension中有将字典转为JSON字符串的方法[params mj_JSONString],然后心里默默称赞了杰哥的强大,看了下转JSON的源码,以为如此简单就可以解决问题。事实证明我还是too young too simple,控制台依旧输出错误error:Error Domain=NSCocoaErrorDomain Code=3840 "No value for key in object around character 7998."。

无奈之下赶紧到github上翻看AFNetworking的文档,发现有这样一句话:

JSON Parameter Encoding
    [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];

 POST http://example.com/
Content-Type: application/json
{"foo": "bar", "baz": [1,2,3]}

立马将这句话加入到网络请求当中:(方法一)

// 获得请求管理者
    AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
    
    // 设置请求格式
    session.requestSerializer = [AFJSONRequestSerializer serializer];
    [session.requestSerializer requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
    [session POST:@"" parameters:@"" progress:nil success:nil failure:nil];

果不其然,这次的返回结果就正常了。

(方法二)最后在网上搜寻了一圈看到也可以使用AFURLSessionManager来做网络请求,不过AFURLSessionManager需要上传个NSData类型的数据。代码如下:
    NSData *postData = [parameters dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:@"url" parameters:nil error:nil];
    request.timeoutInterval= [[[NSUserDefaults standardUserDefaults] valueForKey:@"timeoutInterval"] longValue];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setHTTPBody:postData];
    
    [[manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
        if (!error) {
            NSLog(@"responseObject: %@", responseObject);
        } else {
            NSLog(@"error: %@, %@, %@", error, response, responseObject);
        }
    }] resume];至此这个问题算是解决了,也可以正常拿到后台返回的数据。

AFNetworking3.0 Post JSON数据的更多相关文章

  1. Spring MVC 3.0 返回JSON数据的方法

    Spring MVC 3.0 返回JSON数据的方法1. 直接 PrintWriter 输出2. 使用 JSP 视图3. 使用Spring内置的支持// Spring MVC 配置<bean c ...

  2. swift3.0 存取json数据到沙盒

    do { //将json保存到本地 let jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPr ...

  3. AFNetworking 2.0 获取json数据时,返回 NSLocalizedDescription=Request failed: unacceptable content-type: text/html, 解决方法.

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSe ...

  4. json数据写入hbase

    package main.scala.com.web.zhangyong168.cn.spark.java; import org.apache.hadoop.hbase.HBaseConfigura ...

  5. Core3.0返回的Json数据大小写格式问题

    前言 测试发现,CoreWebAPI返回的Json数据,会将字段的首字母转换为小写, 经百度得,返回数据会默认驼峰命名,导致的. 随即百度, https://www.cnblogs.com/cdone ...

  6. 基于AFNetworking3.0网络封装

    概述 对于开发人员来说,学习网络层知识是必备的,任何一款App的开发,都需要到网络请求接口.很多朋友都还在使用原生的NSURLConnection一行一行地写,代码到处是,这样维护起来更困难了. 对于 ...

  7. iOS_SN_基于AFNetworking3.0网络封装

    转发文章,原地址:http://www.henishuo.com/base-on-afnetworking3-0-wrapper/?utm_source=tuicool&utm_medium= ...

  8. AFNetworking3.0的基本使用方法

    前一段时间在做项目的时候发现AFNetworking3.0已经被大众所接受,所以以后肯定会有很多程序猿朋友必须了解和转移至3.0了,这是我这段时间使用和学习总结出来的一些常用的知识点,希望对大家有用. ...

  9. 使用TSQL查询和更新 JSON 数据

    JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...

随机推荐

  1. Msql中的触发器

    解发器 当执行某种操作时解发的行为. 比如, 当表变动时触发的动作. 像商城订单, 当下单时, 库存减少. 语法: create trigger trigger_name after/befor in ...

  2. python设计模式之迭代器与生成器详解(五)

    前言 迭代器是设计模式中的一种行为模式,它提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.python提倡使用生成器,生成器也是迭代器的一种. 系列文章 python设计模 ...

  3. 用Centos7搭建小微企业Samba文件共享服务器【转】

    转自 用Centos7搭建小微企业Samba文件共享服务器 - 今日头条(www.toutiao.com)http://www.toutiao.com/i6436937837660078593/ 最近 ...

  4. Codeforces Round #434 (Div. 2)

    Codeforces Round #434 (Div. 2) 刚好时间对得上,就去打了一场cf,发现自己的代码正确度有待提高. A. k-rounding 题目描述:给定两个整数\(n, k\),求一 ...

  5. linux系统磁盘挂载

    1.查看系统磁盘挂载情况 fdisk -l 2.格式化磁盘 mkfs -t ext3 /dev/sdb 3.挂在磁盘 mount /dev/sdb /disk2 4.查看磁盘挂载情况 df -h 5. ...

  6. javascript sleep方法

    function sleep(numberMillis) {     var now = new Date();     var exitTime = now.getTime() + numberMi ...

  7. <转>MYSQL数据库数据拆分之分库分表总结

    数据存储演进思路一:单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 数据存储演进思路二:单库多表 随着用户数量的 ...

  8. cgi与html相互调用

    html中调用cgi.<form action="/cgi-bin/mult.cgi" method="get" target="_blank& ...

  9. cin关闭同步[转]

    很多人会说cin的速度比scanf慢很多, 其实不然. cin慢的原因主要在于默认cin与stdin总是保持同步, 这一步是消耗时间大户. 只需要加上ios::sync_with_stdio(fals ...

  10. POJ 3616 Milking Time(最大递增子序列变形)

    题目链接:http://poj.org/problem?id=3616 题目大意:给你时间N,还有M个区间每个区间a[i]都有开始时间.结束时间.生产效率(时间都不超过N),只能在给出的时间段内生产, ...