2014-03-28 42 views
0

我想POST一個目標是服務器,但它不工作。這就是我正在做的。僅供參考,我使用MagicalRecords爲CoreData輕鬆處理。RestKit - postObject跳過參數

DBComments *comment = [DBComments MR_createEntity]; 
comment.body = @"This is body"; 
comment.subject = @"This is subject"; 
comment.commentable_id = [NSNumber numberWithInt:291110]; 
comment.send_email = [NSNumber numberWithBool:YES]; 

[[RKObjectManager sharedManager] postObject:comment path:URL_COMMENTS 
            parameters:nil 
             success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
              KLog(@"success"); 
             } failure:^(RKObjectRequestOperation *operation, NSError *error) { 
              KLog(@"fail"); 
             }]; 

,但我得到如下回應:

E restkit.network:RKObjectRequestOperation.m:576 Object request failed: Underlying HTTP request operation failed with error: Error Domain=org.restkit.RestKit.ErrorDomain Code=-1011 "Expected status code in (200-299), got 400" UserInfo=0x11b688c0 {NSLocalizedRecoverySuggestion={"error":"body is missing, commentable_id is missing"}, AFNetworkingOperationFailingURLRequestErrorKey=<NSMutableURLRequest: 0xc632e50> { URL: http://10.28.79.98:3002/comments }, NSErrorFailingURLKey=http://10.28.79.98:3002/comments, NSLocalizedDescription=Expected status code in (200-299), got 400, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xc23cf70> { URL: http://10.28.79.98:3002/comments } { status code: 400, headers { 
    "Cache-Control" = "no-cache"; 
    Connection = "Keep-Alive"; 
    "Content-Length" = 54; 
    "Content-Type" = "application/json"; 
    Date = "Fri, 28 Mar 2014 07:45:01 GMT"; 
    Server = "WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20)"; 
    "X-Request-Id" = c8b765e61a8d44020be26e9b3267096e; 
    "X-Runtime" = "0.010554"; 
    "X-Ua-Compatible" = "IE=Edge"; 
} }} 

正如你在響應看到,值不被張貼

{"error":"body is missing, commentable_id is missing"} 

這裏是我的映射配置

[objectManager addRequestDescriptorsFromArray:@[ 
                // Comments 
                [RKRequestDescriptor requestDescriptorWithMapping:[self commentsRequestMapping] 
                          objectClass:[DBComments class] 
                          rootKeyPath:@"" 
                           method:RKRequestMethodPOST],                           
                ]]; 

- (RKObjectMapping *)commentsRequestMapping { 
    RKObjectMapping *commentsRequestMapping = [RKObjectMapping requestMapping]; 
    [commentsRequestMapping addAttributeMappingsFromDictionary:@{ 
                   @"body" : @"body", 
                   @"commentable_id" : @"commentable_id", 
                   @"commentable_type" : @"commentable_type", 
                   @"created_at" : @"created_at", 
                   @"id" : @"id", 
                   @"lft" : @"lft", 
                   @"parent_id" : @"parent_id", 
                   @"rgt" : @"rgt", 
                   @"subject" : @"subject", 
                   @"title" : @"title", 
                   @"updated_at" : @"updated_at", 
                   @"user_id" : @"user_id", 
                   @"send_email" : @"send_email", 
                   }]; 

    return commentsRequestMapping; 
} 

我從來沒有能夠使用postObject成功。我錯過了什麼嗎?請幫忙。

+1

打開跟蹤記錄的映射。使用Charles來驗證發送的內容。你是否應該在請求描述符中使用一個無關鍵路徑? – Wain

+0

@非常感謝您的回覆。設置'rootKeyPath:nil',做了竅門。 – Khawar

回答

2

如果服務器期待一個扁平的內容集合,然後請求描述符應該有一個零關鍵路徑,而不是一個空字符串。

重要的是,你送什麼東西匹配服務器期望,你應該使用跟蹤記錄和查爾斯(或類似的工具)的組合來驗證你的代碼實際上生產。

+0

謝謝@Wain,你真的是一個拯救生命的人:) – Khawar