Ios 使用AF2向服务器发送Json数组时出错
我正在尝试使用将Json数组发送到服务器。这是我的Json数组格式Ios 使用AF2向服务器发送Json数组时出错,ios,json,http-post,arrays,afnetworking-2,Ios,Json,Http Post,Arrays,Afnetworking 2,我正在尝试使用将Json数组发送到服务器。这是我的Json数组格式 { "friendList": [ {"id": 1, "username": "user1", "name":"person1", "friendUsername":"fUser1", "friendName":"fName1"}, {"id": 2, "username": "user2", "name":"person2", "friendUserID":"fUser2", "friendN
{
"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“操作无法完成。(Cocoa错误3840)。”(JSON文本没有以数组或对象开头,并且允许不设置片段的选项。)
我不知道我做错了什么。我的代码对我来说似乎是正确的。请帮忙
编辑:
这是我得到的日志
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;
} }
希望它能起作用
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) {
}];
在我看来,您的代码似乎是正确的,而且您创建的JSON对象似乎非常正确。您是否检查了服务器在
响应对象中返回的内容。我猜responseObject
不是有效的JSON,并生成此错误。在服务器端确保已将正确的内容类型设置为“application/JSON”。我遇到了同样的问题,因为我的一个调用缺少一个显示响应为JSON的内容类型头。我使用的是AF2。您的代码来自早期版本。嘿,您是否检查了来自服务器的JSON?我已经添加了来自服务器的响应。请检查上面的编辑。我在您的响应/日志中没有看到对象的JSON类型。似乎您的服务器没有正确发送JSON。我在服务器端创建了客户端,并测试了响应,如果提供了正确的JSON,我不知道为什么它会提供“text/plain”作为内容类型。当我发送GET请求时,它工作正常,并从iOS应用程序中为我提供正确的json响应。
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;