iOS AFNetworking 请求返回400,如何打印后台返回信息

比如 我在某次请求的时候某个 参数忘记 带了。后台返回400 直接答应error就是bad Request ,而后台实际可能返回有提示信息,某个参数缺少等。可以直接方便调试。我该怎么在返回的task中打印后台返回的东西了

首先要先判断错误类型,在AFNetworking的failture block回调里面

if ([error.domain isEqualToString:AFURLResponseSerializationErrorDomain]){

NSData *errorData = [error.userInfo objectForKey:AFNetworkingOperationFailingURLResponseDataErrorKey];

NSString * str = [[NSString alloc]initWithData:errorData encoding:NSUTF8StringEncoding];

NSLog(@"%@",str)

}

1 找到AFNetWorking的AFURLResponseSerialization.m 文件
2 加上#ifdef DEBUG
NSString * const AFNetworkingOperationFailingURLResponseStringErrorKey = @"com.alamofire.serialization.response.error.string";
#endif
3 把 if (data) {
mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data;
}

    替换成  if (data) {
                mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data;

#ifdef DEBUG
mutableUserInfo[AFNetworkingOperationFailingURLResponseStringErrorKey] = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
#endif
}
4在网络请求的方法的 failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {// 在这里添加

  NSLog(@"error ==%@", [error userInfo][@"com.alamofire.serialization.response.error.string"]);

} 这样以后请求数据返回的错误提示就会以字符串的行打印出来, 一看就知道是什么错误了。。。。

用Charles直接抓包看数据

抓包看看返回的报文是什么

400 是你前端的错误! 仔细看看你的请求结构体有没有错误

400 bad request !!! 通常是 前端请求参数类型, 与后台接口规定的参数, 不匹配 导致。

NSData * data = error.userInfo[@"com.alamofire.serialization.response.error.data"];
NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

str就是失败的信息

感谢各位的回答,最终整理了下。
在回掉失败中添加:
//解析出后台返回信息
NSDictionary *errorInfo;
if ([error userInfo][@"com.alamofire.serialization.response.error.data"]) {
errorInfo = [NSJSONSerialization JSONObjectWithData:([error userInfo][@"com.alamofire.serialization.response.error.data"]) options:NSJSONReadingMutableLeaves error:NULL];
}

即可打印后台返回东西了。
接口请求错误回掉