使用 AFNetworking 2 将 Json 数组发送到服务器时出错
Posted
技术标签:
【中文标题】使用 AFNetworking 2 将 Json 数组发送到服务器时出错【英文标题】:error in sending Json array to server using AFNetworking 2 【发布时间】: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"];
【问题讨论】:
【参考方案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 的内容类型标头。
【讨论】:
以上是关于使用 AFNetworking 2 将 Json 数组发送到服务器时出错的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking 2.0 将 [] 方括号添加到发送到服务器的 json
AFNetworking 2.0:是不是可以将纯 json 放入 POST 请求的正文中?
AFNetworking 2.0 图片上传和 JSON 返回错误