2012-12-12 43 views
0

RestKit版本0.10.x我用RestKit 0.20.0 - getObjectsAtPath使用JSON HTTP請求的身體

[[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]; 
     }]; 

添加NSDictionaryloader.params發送的參數集合的請求的HTTP體。


由於RestKit 0.20.0 loadObjectsAtResourcePath已經被替換通過以下的方法,在那裏它不再能夠通過在一個parametersNSDictionary方法,其被用作HTTP機構(JSON編碼):

[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"]; 

了。所以我認爲​​3210也適用。

這是一個錯誤,它還沒有實施,或者我錯過了什麼?

非常感謝。

回答

3

我真的錯過了什麼。

loadObjectsAtResourcePath get的(肯定)用RKRequestMethodGET調用。所以參數會附加到URL上,而不會附加到HTTP正文。

要追加parametrs作爲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; 

藉口匆忙問題。我之前應該看到它。

0

如果我理解正確的問題,RestKit創造者推入開發分支的東西(它總是測試,非常安全的使用)可能會解決您的問題(Commit here),基本上設置在默認情況下此:

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

希望得到這個幫助!

+0

我拉了最新的開發分支提交,但它沒有工作。我編輯了這個問題來澄清我的需求。 – andreschneider

0

可能有問題與getObjectsAtPath的路徑:如果您使用的是路徑的開始斜槓(/)路徑 ,如實例下面移動它的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"); 
          }];