AFNetworking 2.0: no se puede publicar con JSON desde IOS

Desde que actualicé mi código IOS para usar AFNetworking versión 2.0 en lugar de 1.x, no puedo hacer una publicación HTTP más con los parameters JSON.

Sospecho que es porque mi encabezado de request HTTP no es "application / json", pero he tratado de hacerlo y todavía no funciona.

Este es mi código de testing para intentar POST por JSON:

NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys: email, @"email", password, @"password", nil]; [[OTApiClient shanetworkingInstance] POST:@"login" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"result: %@", responseObject); Boolean response = [[responseObject valueForKey:@"success"] boolValue]; if(response == TRUE) { //ok, success NSLog(@"success"); UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Success!" message:@"Successfully logged in" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; } else { NSLog(@"Not successful"); UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Sorry" message:@"The email or password is incorrect." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; } dispatch_async(dispatch_get_main_queue(), ^{ [MBProgressHUD hideHUDForView:self.view animated:YES]; }); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"error: %@ , for operation: %@", error, operation); UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Sorry" message:@"There is a problem connecting to the server, please try again soon." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; dispatch_async(dispatch_get_main_queue(), ^{ [MBProgressHUD hideHUDForView:self.view animated:YES]; }); }]; }); 

y sigo recibiendo este error:

 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.) UserInfo=0xca80730 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.} , for operation: <AFHTTPRequestOperation: 0xca6bee0, state: isFinished, cancelled: NO request: <NSMutableURLRequest: 0xca76040> { URL: http://1.2.3.4:9000/api/login }, response: <NSHTTPURLResponse: 0xc963d60> { URL: http://1.2.3.4:9000/error404 } { status code: 404, headers { "Content-Length" = 1809; "Content-Type" = "text/html; charset=utf-8"; 

}}>

Estoy muy seguro de que el server está listo y accesible porque todas las demás llamadas GET funcionan correctamente.

He verificado la documentation actualizada para AFNetworking 2.0 y parece que lo que tengo es la forma correcta de hacer un JSON POST

Por favor, hágamelo saber si me perdí algo

Gracias

En realidad, finalmente lo puse a funcionar.

Básicamente, para mi requestSerializer del AFHTTPRequestOperationManager, estaba usando AFHTTPRequestSerializer y luego intentaba configurar el Content-Type como "application / json"

Pero una vez que cambié a usar AFJSONRequestSerializer en su lugar, funciona bien ahora

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

ahora funcionará

Encontré el mismo problema usando AFNetworking API a través de Swift, intentando enviar una request de publicación y finalmente también funcionó gracias a la publicación del usuario1805458.

Básicamente, para mi requestSerializer del AFHTTPRequestOperationManager, también estaba usando AFHTTPRequestSerializer y luego intenté configurar Content-Type en "Application / JSON" y no funcionó.

Pero una vez que cambié a utilizar AFJSONRequestSerializer en su lugar, funciona bien ahora:

  let manager = AFHTTPRequestOperationManager() manager.requestSerializer = AFJSONRequestSerializer(writingOptions: nil) // Contrary to user1805458's solution, I did not need to use these two instructions below using Swift. // manager.requestSerializer.setValue("Application/JSON", forHTTPHeaderField:"Content-Type") // manager.requestSerializer.setValue("Application/JSON", forHTTPHeaderField:"Accept") 

Espero que te ayude a corregir este error en caso de que uses Swift, AFNetworking e intentes enviar una request de publicación que contenga un cuerpo JSON.