2012-10-03 139 views
0

我需要配置RestKit與服務器的API,希望下面的交互:RestKit自定義序列化

  • 所有請求都在的multipart/form-data的
  • 有一個JSON有效載荷。然而,客戶端必須將有效載荷 合併爲表單數據字符串,並在其前加上「json =」
  • 驗證通過散列JSON有效內容的內容與 包含任何GET參數的URL完成。而這個附加散列URL(是的,我知道這是不好的,但我 有過API沒有控制)

我試圖讓RestKit其系列化輸出附加到一個JSON =,然後修改RKObjectLoader到計算機並追加正確的簽名散列。我試過繼承RKObjectManager並重載sendObject:toResourcePath:usingBlock:重寫HTTPBody;但不能讓這個工作。我也嘗試了RKClient和configureRequest的子類化,但是好像在調用對象序列化之前調用了這個方法。

這是我第一天使用RestKit工作。幫助將非常感謝!謝謝!

回答

0

更新:我已經制定了一個不同於我原來描述的底部的解決方案。我創建了RKObjectLoader和RKObjectManager的子類。自定義對象管理器只需進行一次更改即可返回自定義對象加載器。對象加載器的發送消息被覆蓋以執行自定義構造。

這是我制定的解決方案。

我用RKClient的一個子類,我重寫

- (void)configureRequest:(RKRequest *)request { 
    [super configureRequest:request]; 
    request.delegate = self; 
} 

,做我所有的編碼/簽訂的委託。

- (void)requestWillPrepareForSend:(RKRequest *)request { 
    [self encodeJSONPayloadForRequest:request]; 
    [self signRequest:request]; 
} 

- (void)encodeJSONPayloadForRequest:(RKRequest*)request { 
    NSDictionary * bodyDict = (NSDictionary*)request.params; 
    NSError * error = nil; 
    NSString * jsonString = [bodyDict JSONStringWithOptions:JKSerializeOptionNone error:&error]; 
    if (error) NSAssert(false, @"error serializing into JSON"); 
    NSDictionary * dictionary = [NSDictionary dictionaryWithObject:jsonString forKey:@"json"]; 
    request.params = dictionary; 
} 

我需要實現一個機制來傳遞給任何預先存在的委託。但是,這種方法似乎有訣竅。