美文网首页
YTKNetwork使用application/json方式传递

YTKNetwork使用application/json方式传递

作者: 风小钻 | 来源:发表于2018-10-18 12:10 被阅读0次

    YTKBaseRequest的requestSerializerType属性默认值是YTKRequestSerializerTypeHTTP,对应的Content-Type类型是application/x-www-form-urlencoded,form表单数据需要被编码为key/value格式发送到后台,一般的使用方式如下(以编辑车牌接口为例):

    @implementation SCCarParkUpdateCarRelationAPI
    
    - (NSString *)requestUrl
    {
        return [NSString stringWithFormat:@"carParkApplication/%@/updateCarRelation", self.orderId];
    }
    
    - (YTKRequestMethod)requestMethod
    {
        return YTKRequestMethodPOST;
    }
    
    - (id)requestArgument
    {
        return self.params;
    }
    
    - (void)setCarLicenceList:(NSArray *)carLicenceList
    {
        // 服务列表信息
        NSData *carLicenceListData = [NSJSONSerialization dataWithJSONObject:carLicenceList options:NSJSONWritingPrettyPrinted error:nil];
        NSString *carLicenceListStr = [[NSString alloc] initWithData:carLicenceListData encoding:NSUTF8StringEncoding];
        [self.params setValue:carLicenceListStr forKey:@"carLicenceList"];
    }
    
    @end
    

    使用json方式发送数据到后台: 重写requestSerializerType方法,返回YTKRequestSerializerTypeJSON;然后requestArgument方法直接返回对象即可,如下:

    @implementation SCCarParkUpdateCarRelationAPI
    
    - (NSString *)requestUrl
    {
        return [NSString stringWithFormat:@"carParkApplication/%@/updateCarRelation", self.orderId];
    }
    
    - (YTKRequestMethod)requestMethod
    {
        return YTKRequestMethodPOST;
    }
    
    - (id)requestArgument
    {
        return self.carLicenceList;
    }
    
    - (YTKRequestSerializerType)requestSerializerType
    {
        return YTKRequestSerializerTypeJSON;
    }
    

    需要注意的是:

    requestArgument方法必须返回能转化成json的对象,要求如下:

    顶层对象必须是NSArray或者NSDictionary

    所有的对象必须是NSString、NSNumber、NSArray、NSDictionary、NSNull的实例

    所有NSDictionary的key必须是NSString类型

    数字对象不能是非数值或无穷

    还有一点,如果使用MJExtension中的mj_jsonObject把对象转换成json对象时,必须保证该对象不遵守任何协议,不然转换是不成功的,issue请见:https://github.com/CoderMJLee/MJExtension/issues/649

    其它注意事项:

    其它注意事项:

    1.application/json可使用的http方法有post/put/delete。

    get操作没有body部分,只能以key/value形式传递参数拼接在url中

    post/put/delete有body部分,与服务器传递信息,都放在body中

    2.是否使用application/json方式进行传值,需要与后台约定好

    3.可对单个接口使用application/json方式进行传值,不影响到其它的接口

    4.当application/json方式进行传值时,后台框架上使用了@RequestBody注解,读取请求body里面的值直接映射成参数,框架完成了这个事。

    相关文章

      网友评论

          本文标题:YTKNetwork使用application/json方式传递

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