美文网首页
AFNetworking获取完整的error body

AFNetworking获取完整的error body

作者: YANGXIXIYear | 来源:发表于2018-09-25 17:39 被阅读0次

    最近在做项目的版本迭代,有些接口的数据请求前一秒都是对的,后一面就报返回的数据不是json类型,后台服务器说没修改,这就让我很懵了,服务端自测和安卓端测试都没毛病,难道真的是我的网络请求有问题?很疑惑!!!打印error的信息,只有status code和简短的说明,根本不知道具体的原因,服务端说能不能给他们看请求返回的body,我赶紧去查看AFNetworking中error的相关属性,发现并没有body相关的内容,后来在网上搜到了一篇文章AFNetworking如何获取完整的error body(感谢这位朋友☺️),我立马测试了一下,真的可以!!!下面是我的测试代码:

    继承AFJSONResponseSerializer新建一个类JsonResponseSerializer

    1、JsonResponseSerializer.h

    #import "AFURLResponseSerialization.h"
    
    /// NSError userInfo keys that will contain response data
    static NSString * const JSONResponseSerializerWithDataKey = @"body";
    
    static NSString * const JSONResponseSerializerWithBodyKey = @"statusCode";
    
    @interface JsonResponseSerializer : AFJSONResponseSerializer
    
    @end
    

    2、JsonResponseSerializer.m添加方法

    - (id)responseObjectForResponse:(NSURLResponse *)response
                               data:(NSData *)data
                              error:(NSError *__autoreleasing *)error
    {
        
        id JSONObject = [super responseObjectForResponse:response data:data error:error]; // may mutate `error`
        
        if (*error != nil) {
            
            NSMutableDictionary *userInfo = [(*error).userInfo mutableCopy];
            
            [userInfo setValue:[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] forKey:JSONResponseSerializerWithDataKey];
            
            [userInfo setValue:[response valueForKey:JSONResponseSerializerWithBodyKey] forKey:JSONResponseSerializerWithBodyKey];
            
            NSError *newError = [NSError errorWithDomain:(*error).domain code:(*error).code userInfo:userInfo];
            (*error) = newError;
        }
        
        return JSONObject;
    }
    

    3、用法,在请求之前为manager添加代码:

    manager.responseSerializer = [JsonResponseSerializer serializer];
    

    相关文章

      网友评论

          本文标题:AFNetworking获取完整的error body

          本文链接:https://www.haomeiwen.com/subject/srsloftx.html