我对服务中的对象有两种不同的响应:
这是没有错误时的第一个回复:
{"responseError":{"ApplicationErrorCode":101,"DeveloperMessage":"Code is needed","UserMessage":null},"shortToken":null}
这是出现错误时的第二个响应:
{"responseError":null,"shortToken":sometoken}
我创建了一个名为RKShortToken
的对象,它看起来像这样:
@interface RKShortToken : NSObject
@property (copy, nonatomic) RKResponseError *responseError;
@property (copy, nonatomic) NSString *shortToken;
@end
此外,我还有一个名为RKResponseError
的对象:
@interface RKResponseError : NSObject
@property (copy, nonatomic) NSString *applicationErrorCode;
@property (copy, nonatomic) NSString *developerMessage;
@property (copy, nonatomic) NSString *userMessage;
@end
首先初始化RestKit客户端:
NSURL *baseURL = [NSURL URLWithString:kServiceDevBaseURL];
self.manager = [RKObjectManager managerWithBaseURL:baseURL];
[self.manager setRequestSerializationMIMEType:RKMIMETypeJSON];
[self.manager setAcceptHeaderWithMIMEType:RKMIMETypeJSON];
[self.manager addResponseDescriptorsFromArray:[RKObjectManager sharedManager].responseDescriptors];
[self.manager addRequestDescriptorsFromArray:[RKObjectManager sharedManager].requestDescriptors];
[self.manager.HTTPClient.operationQueue setMaxConcurrentOperationCount:5];
[RKObjectManager setSharedManager:self.manager];
比添加路线:
RKRoute *shortTokenRoute = [RKRoute routeWithClass:[RKShortToken class] pathPattern:@"users/login/quick/shortToken" method:RKRequestMethodGET];
shortTokenRoute.shouldEscapePath = YES;
[self.manager.router.routeSet addRoute:shortTokenRoute];
然后添加一个描述符:
RKObjectMapping *shortTokenMapping = [RKObjectMapping mappingForClass:[RKShortToken class]];
[shortTokenMapping addAttributeMappingsFromDictionary:@{ @"responseError" : @"responseError", @"shortToken" : @"shortToken" }];
RKResponseDescriptor *shortTokenDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:shortTokenMapping
method:RKRequestMethodAny
pathPattern:@"users/login/quick/shortToken"
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[[RKObjectManager sharedManager] addResponseDescriptor:shortTokenDescriptor];
如何使用RestKit处理此类响应?我认为我的路线或描述符的内容是错误的。
提前致谢!
答案 0 :(得分:1)
RKRoute
个对象用于请求,因此它们不参与处理响应数据。
您的响应描述符具有单独的映射:@"responseError" : @"responseError"
- 如果您将响应直接映射到字典中,则会使用此映射:@property (copy, nonatomic) NSDictionary *responseError;
。
由于您希望将响应映射到RKResponseError
实例,您需要为该类创建另一个映射,并使用addRelationshipMappingWithSourceKeyPath:@"responseError" mapping:responseErrorMapping
将新映射连接到“外部”映射。
最后,请注意RK
是RestKit的命名前缀,您应该为自己创建的类使用不同的前缀。