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