2014-01-09 2 views
1

Я пытаюсь отправить массив Json с помощью AFNetworking на сервер. Вот мой Json формат массиваОшибка при отправке массива Json на сервер с использованием AFNetworking 2

{ 
    "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.)

Я не знаю, что я делаю неправильно здесь. Мой код кажется мне правильным. Пожалуйста помоги.

EDIT:

это журнал, я получаю

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"]; 

ответ

0

Надежда Она будет работать ....

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) { 

      }]; 
+0

Я использую AFNetworking 2. Ваш код из более ранней версии. – suhit

0

Ваш код кажется верный мне, и похоже, вы создали объект JSON очень правильно. Вы проверили, что сервер возвращает в responseObject. Я думаю, responseObject недействителен JSON и порождает эту ошибку.

+0

Эй, ты проверил JSON, пришедший с сервера? – san

+0

Я добавил ответ, исходящий с сервера, пожалуйста, проверьте приведенные выше изменения. – suhit

+0

Я не вижу тип объекта JSON в вашем ответе/журнале. Кажется, ваш сервер не отправляет JSON правильно. – san

0

На вашей стороне сервера убедитесь, что вы установили правильный тип контента в «application/json». У меня была такая же проблема, потому что в одном из моих вызовов отсутствовал заголовок типа содержимого, на котором был ответ JSON.

2
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer]; 
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
manager.requestSerializer = serializer; 
+0

Top top top !!!! –

Смежные вопросы