如何在restkit-0.2中为同一个pathPattern添加不同的响应映射?

时间:2013-05-21 17:46:52

标签: ios mapping restkit-0.20

可以为同一个pathPattern添加几个响应映射吗?

我有下一个情况:


    Get request:
    RKEntityMapping * restDayMapping = [RestDay entityMapping];
    RKResponseDescriptor * restDayDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:restDayMapping pathPattern:@"program/restdays" keyPath:@"rest_days" statusCodes:statusCodes];
          [manager addResponseDescriptor:restDayDescriptor];

    Put request:
    RKObjectMapping * restDayPutMapping = [RKObjectMapping requestMapping];
    [restDayPutMapping addAttributeMappingsFromDictionary:@{@"dayNumber" : @"restDays.dayNumber"}];

    RKRequestDescriptor * restDayPutDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:[restDayPutMapping inverseMapping] objectClass:[UserProgram class] rootKeyPath:@"rest_days"];
    [manager addRequestDescriptor:restDayPutDescriptor]; 

因此两个映射都以相同的路径模式发送:@“program / restdays” 但是对于第一个GET请求服务器端返回json:


    {"rest_days":[{"dayNumber":1},{"dayNumber":4},{"dayNumber":2}]}.

对于第二个PUT请求,json:


    {"success" : "true"}

我如何配置我的restkit映射? 谢谢。

编辑: 升级restkit库并发现了很棒的功能,方法被删除了:

+ (instancetype)responseDescriptorWithMapping:(RKMapping *)mapping
                                  pathPattern:(NSString *)pathPattern
                                      keyPath:(NSString *)keyPath
                                  statusCodes:(NSIndexSet *)statusCodes

并添加了新的:

+ (instancetype)responseDescriptorWithMapping:(RKMapping *)mapping
                                       method:(RKRequestMethod)method
                                  pathPattern:(NSString *)pathPattern
                                      keyPath:(NSString *)keyPath
                                  statusCodes:(NSIndexSet *)statusCodes

所以现在我可以为不同的请求方法设置不同的映射。 谢谢大家的帮助。

2 个答案:

答案 0 :(得分:2)

对于相同的路径模式,您可以有2个不同的映射,只要它们用于不同的目的(如GET和PUT)。 RestKit需要能够告诉使用哪一个,只要一切都可以。

有两种方法可以做PUT:

objectManager putObject:...

这将自动尝试将响应映射到源对象。因此,如果您期望回复状态响应,则效果不佳。或者,您可以使用RestKit为您进行序列化:

NSError* error;
NSDictionary *parameters = [RKObjectParameterization parametersWithObject:object requestDescriptor:requestDescriptor error:&error];
NSData *JSON = [RKMIMETypeSerialization dataFromObject:parameters MIMEType:RKMIMETypeJSON error:&error];

然后自己输出结果(使用RestKit类或NSURLConenction)。

您最好的选择可能是使用RKObjectRequestOperation,从技术上讲,您不会使用针对相同路径模式的映射,但您可以使用映射来创建请求并处理响应。

答案 1 :(得分:1)

升级的restkit库(2013年8月29日)发现了很棒的功能,方法被删除了:

+ (instancetype)responseDescriptorWithMapping:(RKMapping *)mapping
                                  pathPattern:(NSString *)pathPattern
                                      keyPath:(NSString *)keyPath
                                  statusCodes:(NSIndexSet *)statusCodes

并添加了新的:

+ (instancetype)responseDescriptorWithMapping:(RKMapping *)mapping
                                       method:(RKRequestMethod)method
                                  pathPattern:(NSString *)pathPattern
                                      keyPath:(NSString *)keyPath
                                  statusCodes:(NSIndexSet *)statusCodes

所以现在我可以为不同的请求方法设置不同的映射。 谢谢大家的帮助。