【问题标题】:error in sending Json array to server using AFNetworking 2使用 AFNetworking 2 将 Json 数组发送到服务器时出错
【发布时间】:2014-01-09 08:12:03
【问题描述】:

我正在尝试使用 AFNetworking 将 Json 数组发送到服务器。这是我的 Json 数组格式

{
    "friendList": [
      {"id": 1, "username": "user1", "name":"person1", "friendUsername":"fUser1", "friendName":"fName1"},
      {"id": 2, "username": "user2", "name":"person2", "friendUserID":"fUser2", "friendName":"fName2"},
      {"id": 3, "username": "user3", "name":"person3", "friendUserID":"fUser3", "friendName":"fName3"},...
    ]
}   

这是我将 Json 发送到服务器的代码

    NSMutableArray *friendsArray = [NSMutableArray new];
    NSDictionary *params1 = @{@"id": @"1",
                             @"username":@"user1",
                             @"name":@"person1",
                             @"friendUsername":@"fUser1",
                             @"friendName":@"ffName1"};

    NSDictionary *params2 = @{@"id": @"2",
                             @"username":@"user2",
                             @"name":@"person2",
                             @"friendUsername":@"fUser2",
                             @"friendName":@"ffName2"};

    NSDictionary *params3 = @{@"id": @"3",
                             @"username":@"user3",
                             @"name":@"person3",
                             @"friendUsername":@"fUser3",
                             @"friendName":@"ffName3"};

    [friendsArray addObject:params1];
    [friendsArray addObject:params2];
    [friendsArray addObject:params3];


AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];


NSDictionary *parameters = @{@"friendsList":friendsArray};
NSLog(@"%@", parameters);

manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];

[manager POST:@"http://localhost:8080/RestWebServices/Rest/Post" parameters:parameters    success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
    NSLog(@"Error: %@", operation.response);
}];

我收到此错误Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.)

我不知道我在这里做错了什么。我的代码对我来说似乎是正确的。请帮忙。

编辑:

这是我收到的日志

Error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x8b63c40 {NSDebugDescription=Invalid value around character 0.}
2014-01-09 21:57:25.497 ServerJsonParsingExample[1431:70b] status code = 400
2014-01-09 21:57:25.497 ServerJsonParsingExample[1431:70b] for operation: <NSHTTPURLResponse: 0x8e611e0> { URL: http://localhost:8080/RestfulWebServices/Rest/Seemo } { status code: 400, headers {
    Connection = close;
    "Content-Type" = "text/plain";
    Date = "Thu, 09 Jan 2014 16:27:25 GMT";
    Server = "Apache-Coyote/1.1";
    "Transfer-Encoding" = Identity;
} }

我已经添加到代码中,但错误仍然存​​在

manager.responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndex:400];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];

【问题讨论】:

    标签: ios json http-post arrays afnetworking-2


    【解决方案1】:
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
    [serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    manager.requestSerializer = serializer;
    

    【讨论】:

      【解决方案2】:

      希望它会起作用....

          AFHTTPClient *httpClient = [[AFHTTPClient alloc]initWithBaseURL:[NSURL urlWithString:@"http://localhost:8080/RestWebServices/Rest/Post"];
         [httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
         [httpClient setDefaultHeader:@"Accept" value:@"application/json"];    
          [AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];
          httpClient.parameterEncoding = AFJSONParameterEncoding;
      
          [httpClient postPath:nil parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
      
                  } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
      
                  }];
      

      【讨论】:

      • 我正在使用 AFNetworking 2。您的代码来自早期版本。
      【解决方案3】:

      您的代码对我来说似乎是正确的,并且看起来您已经非常正确地创建了 JSON 对象。您是否检查过服务器在 responseObject 中返回的内容。我猜responseObject 不是有效的 JSON 并产生此错误。

      【讨论】:

      • 嘿,你检查来自服务器的 JSON 了吗?
      • 我已经添加了来自服务器的响应,请检查上面的编辑
      • 我在您的响应/日志中没有看到 JSON 类型的对象。您的服务器似乎没有正确发送 JSON。
      • 我在服务器端创建了客户端并测试了响应是否给了我正确的 json,我不知道为什么它将“text/plain”作为内容类型。当我发送 GET 请求时,它运行良好,并从 iOS 应用程序给我正确的 json 响应。
      【解决方案4】:

      在您的服务器端,确保您已将正确的内容类型设置为“application/json”。我遇到了同样的问题,因为我的一个调用缺少显示响应为 JSON 的内容类型标头。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-06
        • 1970-01-01
        相关资源
        最近更新 更多