iOS 使用AFN post提交Json数据

作者: 随心_追梦 | 来源:发表于2017-03-11 17:20 被阅读5338次

    今天后台让我们提交数据的时候不要提交字典,要提交Json格式的数据,于是我就把字典转化成Json

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:body options:0 error:&error];
    
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    
    

    发现上传之后后台不能接收,说是少了一个 { }。于是就各种百度,发现原来是我的请求头设置错了,所以找到下面这样一个方法,重心设置请求头,结果上传成功:

    - (void)postJsonToServer {
    
    NSDictionary *body = @{@"UI_NAME":@"FSEAFNSEFN"};
    
    NSError *error;
    
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:body options:0 error:&error];
    
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    
    NSMutableURLRequest *req = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:@"http://124.128.94.156:8000/api/UserApi/BusinessRegisterPic" parameters:nil error:nil];
    
    req.timeoutInterval= [[[NSUserDefaults standardUserDefaults] valueForKey:@"timeoutInterval"] longValue];
    
    [req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    
    [req setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    
    [req setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
    
    [[manager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
    
    if (!error) {
    
    NSLog(@"Reply JSON: %@", responseObject);
    
    if ([responseObject isKindOfClass:[NSDictionary class]]) {
    
    //blah blah
    
    }
    
    } else {
    
    NSLog(@"Error: %@, %@, %@", error, response, responseObject);
    
    }
    
    }] resume];
    
    }
    

    相关文章

      网友评论

      • 凌然九霄:感谢楼主,我们后台也要这么搞,我也是醉了
      • 谦言忘语:大哥,你这个问题的话,直接在设置请求格式为JSON,然后POST方法请求的时候也像以前那样传个字典不行么?这样会方便点吧?
        //使用JSON请求格式
        _sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
      • iOS_渔翁:解析出来了 还是{"name": "aaa", "gender": "1"}, 这种, 但是怎么也取不到值啊
        iOS_渔翁:@随心_追梦 那要怎么搞啊
        随心_追梦:json格式不是字典,通过key是取不出值来的
        iOS_渔翁:就这个responseObject, json解析出来还是json格式的, 怎么搞,就跟上面的差不多, responseObject[@"name"]怎么都取不到, 这是怎么回事??
      • 悖论13:帮忙了 哥们 我想请问下原理,,,因为我遇到这个问题用你这个方法解决了
        随心_追梦:不好意思,最近有点忙。至于你说的原理,还是百度吧!我也是似懂非懂,就不误人子弟了!
      • LD_左岸:解决了我的问题 6666
        req.timeoutInterval= [[[NSUserDefaults standardUserDefaults] valueForKey:@"timeoutInterval"] longValue]; 您这句话干什么用的
        我可以这么写吗[req setValue:@"timeoutInterval" forKey:60];
        随心_追梦:@左岸__ 这个应该也是设置请求时间的,你写的这句话[req setValue:@"timeoutInterval" forKey:60];好像afn里有一个全局的,设置一次就可以了
        LD_左岸:@随心_追梦 我在这打印一下 我发现打出来是0呢 我直接粘贴过来代码用的 不知道这句代码什么意思
        随心_追梦:你这句话afnetworking里面设置加载时间的吧
      • 再见小舒服:解决了我的问题666
        随心_追梦:共同进步:grin:

      本文标题:iOS 使用AFN post提交Json数据

      本文链接:https://www.haomeiwen.com/subject/bsfzgttx.html