Objective c 基于RestKit中JSON响应值的映射

Objective c 基于RestKit中JSON响应值的映射,objective-c,restkit,Objective C,Restkit,我正在使用的REST服务有两种不同的响应模式 { success: true, data: { //all data goes here} } 或 我正在尝试配置RESTKit,以返回我创建的用于存储错误响应的特定错误对象,以及success=true情况下配置的类(基于URL) 我正试图使用RKDynamicMapping,根据“成功”的价值来实现这一点 -(RKDynamicMapping*)createCompatibleMapping:(NSDictionary*)successDic

我正在使用的REST服务有两种不同的响应模式

{
success: true,
data: { //all data goes here}
}

我正在尝试配置RESTKit,以返回我创建的用于存储错误响应的特定错误对象,以及success=true情况下配置的类(基于URL)

我正试图使用RKDynamicMapping,根据“成功”的价值来实现这一点

-(RKDynamicMapping*)createCompatibleMapping:(NSDictionary*)successDictionary withClass:(Class)Class{
NSMutableDictionary*withSuccessDictionary=[NSMutableDictionary Dictionary WithDictionary:successDictionary];
[使用SuccessDictionary addEntriesFromDictionary:@{@“success”:@“success”}];
RKObjectMapping*successMapping=[RKObjectMappingForClass:class];
[成功应用addAttributeMappingsFromDictionary:withSuccessDictionary];
RKObjectMapping*restErrorMapping=[RKObjectMappingForClass:[RESTErrorObject类]];
[restErrorMapping addAttributeMappingsFromDictionary:@{“成功”:@“成功”,“错误”:@“错误字符串”,“消息”:@“消息”}];
RKDynamicMapping*dynamicMapping=[RKDynamicMapping new];
[dynamicMapping addMatcher:[RKObjectMappingMatcher matcherWithKeyPath:@“成功”预期值:[NSNumber numberWithBool:YES]对象映射:成功映射]];
[dynamicMapping addMatcher:[RKObjectMappingMatcher matcherWithKeyPath:@“成功”预期值:[NSNumber numberWithBool:NO]objectMapping:restErrorMapping]];
返回动态映射;
}
然后我将其添加到响应描述符中,如下所示:

然后我打电话

我知道这是一个很大的帖子,可能很难理解。我感谢你的耐心 对我该做什么感到困惑


更改REST API实际上不是一个选项。

尝试将预期值设置为@“true”@“false”。我认为,在运行动态映射时,这些值将是字符串,并且在映射期间,如果目标类型是BOOL,它们将仅转换为BOOL。

什么是
cardDetailsResponseMapping
?响应描述符应使用
dynamicMapping
。cardDetailsResponseMapping是一个动态映射。“a”动态映射,与代码中显示的不同?返回的是我正在使用的:)
{
success: false,
error: "Error",
message: "some message"
}
RKResponseDescriptor * cardDetailsResponseDescriptor2  = [RKResponseDescriptor responseDescriptorWithMapping:cardDetailsResponseMapping method:RKRequestMethodGET
                                                                                                    pathPattern:@"services/details/:cardNumber" keyPath:@"data"
                                                                                                    statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[_objectManager.router.routeSet addRoute:[RKRoute routeWithName:@"getCardDetailsRoute" pathPattern:@"services/details/:cardNumber" method:RKRequestMethodGET]];
[self.objectManager getObjectsAtPathForRouteNamed:@"getCardDetailsRoute" object:card parameters:@{@"token" : authToken} success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {