可以为同一个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
所以现在我可以为不同的请求方法设置不同的映射。 谢谢大家的帮助。
答案 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
所以现在我可以为不同的请求方法设置不同的映射。 谢谢大家的帮助。