如何在 iOS 中使用 RestKit 来处理发送 JSON 而没有 rootkey 的 RESTful 服务器?

Posted

技术标签:

【中文标题】如何在 iOS 中使用 RestKit 来处理发送 JSON 而没有 rootkey 的 RESTful 服务器?【英文标题】:How can I handle, using RestKit in iOS, a RESTful server sending JSON without rootkey? 【发布时间】:2012-11-09 16:42:40 【问题描述】:

我成功 POST 到 RESTful 服务,但它正在发回后续 json 响应;

 T restkit.network:RKObjectLoader.m:202 bodyAsString: "Successful":true,"Message":"We have received 9138 message(s)","Data":null

(来自 RestKit 调试器/记录器)。 如您所见,该 JSON 中没有根密钥。 现在 RestKit 在尝试使用以下代码进行映射时会报错;

RKObjectMapping *serverResponseMapping = [RKObjectMapping mappingForClass:[ServerReply class]];
[serverResponseMapping setRootKeyPath:@""]; //tried without this and with a value but no change!
[serverResponseMapping mapKeyPath:@"Success" toAttribute:@"success"];
[serverResponseMapping mapKeyPath:@"Message" toAttribute:@"message"];
[serverResponseMapping mapKeyPath:@"Data" toAttribute:@"data"];
[[manager mappingProvider] addObjectMapping:serverResponseMapping];

当我尝试映射时,我从 Restkit 收到以下错误;

W restkit.object_mapping:RKObjectMapper.m:87 Adding mapping error: Could not find an object mapping for keyPath: ''

只是为了强调 -[serverResponseMapping setRootKeyPath:@""];//尝试不使用这行代码,也有值但没有变化!

谁能告诉我如何解决这个问题,因为我认为我无法更改服务器?

谢谢

【问题讨论】:

【参考方案1】:

终于解决了,所以我想我会更新它,以防其他人发现它有用。 如果使用 RKObjectManager postObject 消息的块构造,则可以在 ObjectLoader 中指定返回消息的接收对象;

[manager postObject:thePostMsgObj usingBlock:^(RKObjectLoader *loader)
    loader.targetObject = theResponseObj;
    loader.delegate = self;
    loader.objectMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[response Class]];
];

【讨论】:

以上是关于如何在 iOS 中使用 RestKit 来处理发送 JSON 而没有 rootkey 的 RESTful 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jersey 和 JSON,如何忽略根元素?

iOS:RestKit 加载对象和发送参数

关于 RestKit 中的对象序列

restkit JSON ios - putObject - 发送类型信息

使用 RESTKit 做一个简单的 json POST

iOS RestKit 自定义错误处理