在RestKit版本0.10.x中,我使用了
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/special/path" usingBlock:^(RKObjectLoader *loader) {
loader.objectMapping = aMapping;
loader.delegate = _delegate;
loader.method = RKRequestMethodPOST;
loader.userData = [MobileGatewayReauthentication class];
loader.params = [anDictionary toJsonRKParam];
}];
将NSDictionary
添加到loader.params
以发送参数集合作为请求的HTTP正文。
自RestKit 0.20.0以来,方法loadObjectsAtResourcePath
已被以下方法替换,在NSDictionary
中无法再传递parameters
,用作HTTP正文(JSON编码):
[RKObjectManager.sharedManager getObjectsAtPath:path parameters:params success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
{
NSLog(@"success");
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"failure");
}];
使用[[RKObjectManager sharedManager].HTTPClient
(AFNetworking)时,设置时就像魅力一样:
[[RKObjectManager sharedManager].HTTPClient setParameterEncoding:AFJSONParameterEncoding];
[[RKObjectManager sharedManager].HTTPClient postPath:path parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Response: %@", operation.responseString);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@",error.localizedDescription);
}];
但我需要更高级别的对象映射器。
[[RKObjectManager sharedManager].HTTPClient setParameterEncoding:AFJSONParameterEncoding];
对[RKObjectManager sharedManager]没有影响,但
[[RKObjectManager sharedManager].HTTPClient setDefaultHeader:@"aHeader" value:@"aValue"];
了。所以我假设setParameterEncoding
也有效。
这是一个错误,它尚未实施,还是我错过了什么?
非常感谢。
答案 0 :(得分:3)
我真的错过了什么。
loadObjectsAtResourcePath
使用RKRequestMethodGET
调用(肯定)。因此,参数会附加到URL,而不是HTTP主体。
要将参数附加为JSON HTTP正文,您必须使用post方法,例如
- (void)postObject:(id)object
path:(NSString *)path
parameters:(NSDictionary *)parameters
success:(void (^)(RKObjectRequestOperation *operation, RKMappingResult *mappingResult))success
failure:(void (^)(RKObjectRequestOperation *operation, NSError *error))failure;
请原谅这个仓促的问题。我以前应该看过它。
答案 1 :(得分:0)
如果我正确地理解了你的问题,那么RestKit的创建者会在开发分支中推送一些东西(它总是经过测试并且非常安全)可以解决你的问题(Commit here),它基本上默认设置为:< / p>
[[RKObjectManager sharedManager].HTTPClient setDefaultHeader:@"Accept" value:RKMIMETypeJSON];
[[RKObjectManager sharedManager].HTTPClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
希望这有帮助!
答案 2 :(得分:0)
getObjectsAtPath:path中的路径可能存在问题 如果在路径的开头使用斜杠(/),请将其移动到baseurl的末尾,如下例所示。
NSURL *baseURL = [NSURL URLWithString:@"http://rest.example.com:8080/test/"];
AFHTTPClient* client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
[objectManager getObjectsAtPath:@"rest/updates"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"success");
}
failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"failure");
}];