0

在我使用的 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];
        }];

添加一个NSDictionarytoloader.params以将参数集合作为请求的 HTTP 正文发送。


从 RestKit 0.20.0 开始,该方法loadObjectsAtResourcePath已被以下方法替换,其中不再可能传递用作 HTTP 正文(JSON 编码)的NSDictionaryin :parameters

[RKObjectManager.sharedManager getObjectsAtPath:path parameters:params success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
{
    NSLog(@"success");
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    NSLog(@"failure");
}];

当使用[[RKObjectManager sharedManager].HTTPClientAFNetworking)时,它在设置时就像一个魅力:

[[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也有效。

这是一个错误,它还没有实现,还是我错过了什么?

非常感谢。

4

3 回答 3

3

我真的错过了一些东西。

loadObjectsAtResourcePathget (肯定)用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;

原谅这个仓促的问题。我以前应该看过的。

于 2012-12-18T12:12:37.667 回答
0

如果我正确理解了您的问题,RestKit 创建者在开发分支中推送了一些内容(始终经过测试并且使用起来非常安全),这可能会解决您的问题(在此处提交),默认情况下基本上设置为:

[[RKObjectManager sharedManager].HTTPClient setDefaultHeader:@"Accept" value:RKMIMETypeJSON];
[[RKObjectManager sharedManager].HTTPClient registerHTTPOperationClass:[AFJSONRequestOperation class]];

希望这有帮助!

于 2012-12-12T19:11:14.297 回答
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");
                            }];
于 2012-12-18T08:44:42.703 回答