AFNetworking 2.0 Obtenga JSON del código 400 en bloque de falla

Estoy usando AFHTTPRequestOperationManager para una request de POST . Ahora estoy deliberadamente ingresando información incorrecta para manejar un código de error de 400 . Ahora, el service web realmente devuelve un JSON con un post que explica al usuario lo que han hecho mal. Me gustaría mucho que JSON muestre el post en un UIAlertView . Sin embargo, el locking de falla de:

 [operationManager POST:ServerURL parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"Success: Status Code: %d", operation.response.statusCode); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Failed: Status Code: %d", operation.response.statusCode); }]; 

no pasa un object de respuesta como el del bloque de éxito. ¿Alguien sabe cómo puedo acceder al JSON devuelto por el Servicio web con el error 400? El NSError *error simplemente me da la Request failed: bad request (400) y no el JSON devuelto.

Cualquier ayuda sería apreciada,
Micro

Mirando el código de - responseObject , parece que un error HTTP evita que se complete. Puede tomar la responseData directamente y analizarla usted mismo, pero diría que esto es un error o una buena request de mejora. (Parece que - responseObject probablemente debería estar revisando self.responseSerializationError , no self.error , al decidir si debería intentar build un object de respuesta).

Puede hacer cualquiera de estas soluciones.

1) Establezca los códigos de estado acceptableStatusCodes para que acepte su código de estado 400 y maneje en el bloque de éxito

 manager.responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndex:400]; 

2) Cree un ResponseSerializer personalizado, como este JSONResponseSerializerWithData , para insert el responseObject en el NSError userInfo, y maneje en el bloque de falla

Consejo profesional : AFNetworking es opensource, solo eche un vistazo a AFHTTPRequestOperation para conocer los methods.

 setCompletionBlockWithSuccess:failure: responseObject error 

También enfrenté el mismo problema en AFNetworking, ya que en lugar de usar

 - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters progress:(void (^)(NSProgress * _Nonnull))uploadProgress success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure 

Intenta usar esa:

 - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block progress:(nullable void (^)(NSProgress * _Nonnull))uploadProgress success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure 

Gracias,

Siguiendo el código networkingactado para mí:

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; manager.requestSerializer = [AFJSONRequestSerializer serializer]; [manager.requestSerializer setValue:@"parse-application-id-removed" forHTTPHeaderField:@"X-Parse-Application-Id"]; [manager.requestSerializer setValue:@"parse-rest-api-key-removed" forHTTPHeaderField:@"X-Parse-REST-API-Key"]; [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; manager.securityPolicy.allowInvalidCertificates = YES; NSString *URLString = [NSString stringWithFormat:@"%@/%@", BASE_URL,methodName]; [manager POST:URLString parameters:requestDict success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); [myDelegate StopIndicator]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); [myDelegate StopIndicator]; }];