0

私はWebサービスを初めて使用し、GETを正常に機能させています。POSTしようとすると、次のJSON文字列を送信します。

{"frequency":"None","leader":"test@test.com"}

しかし、サーバーはこれを期待しています:

{ 
    "meta": 
       {"limit": 20, "total_count": 2}, 
    "objects": 
       [{"frequency": "None", "leader": "jsmith@gmail.com"},
        {"frequency": "None", "leader": "jsmith@gmail.com"}]
}

NewMeetingRKオブジェクトで、次のように「オブジェクト」にマップしようとしています。

mgr.serializationMIMEType = RKMIMETypeJSON;

RKObjectMapping* newmtg = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];

    [newmtg mapKeyPath: @"frequency"     toAttribute:@"repeat"      ];
    [newmtg mapKeyPath: @"leader"     toAttribute:@"leader"      ];

RKObjectMapping* newmtgSerializeMapping = [newmtg inverseMapping];
    [mgr.mappingProvider setSerializationMapping:newmtgSerializeMapping forClass:[NewMeetingRK class]];
[mgr.mappingProvider setMapping:newmtgSerializeMapping forKeyPath:@"objects"];

[mgr.router routeClass:[NewMeetingRK class] toResourcePath:@"" forMethod:RKRequestMethodPOST];    

これは機能していません。toResourcePathを@"/objects"に変更しようとしましたが、それも機能しませんでした。サーバー上のJSON値の2番目のセットに値を送信する方法はありますか?

- -編集 - -

@HotLicksが指摘したように、配列が欠落していました-ありがとう。しかし、JSON値を使用した単純な投稿を機能させることはできません。
RKObjectManagerの代わりに、このようなRKClientで簡単なことを行うことができますか?

client = [RKClient clientWithBaseURL:[RKURL URLWithBaseURLString:@"https://appzute.appspot.com"]];
NSLog(@"I am your RKClient singleton : %@", [RKClient sharedClient]); 
client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES;
[client setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

NSMutableArray *meetingArray = [NSMutableArray arrayWithCapacity:100];  
[meetingArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:
                         self.leaderEmail.text, @"leader", 
                         self.repeatLabel.text, @"frequency", 
                         nil]];
NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:meetingArray, @"objects", nil];

NSString *jsonString = [jsonDictionary JSONRepresentation];
NSLog (@"jsonString is: %@",jsonString);
[client post:@"/api/meeting/?format=json&username=testuser@test.com&api_key=sdf7asd87fs8df78sdf" params:jsonString delegate:self]; 

jsonStringの値は完璧に見えます:{"objects":[{"leader": "me@me.com"、 "frequency": "None"}]}問題は、params:jsonStringが必要なため無効であるということです。文字列ではなくオブジェクト。しかし、params:jsonDictionaryを使用すると、次のログファイルが取得されます。送信済みRKRequest:objects [] [leader] = me%40me.com&objects [] [frequency] = None I restkit.network:RKRequest.m:676ステータスコード:500

何が間違っている可能性がありますか?

ありがとう!

4

1 に答える 1

0

その JSON ツールキットには慣れていませんが、通常は、「オブジェクト」ごとに 1 つずつ、2 つの辞書を作成し、それらを配列 (「オブジェクト」配列) に配置します。次に、「メタ」情報の辞書を作成します。最後に、「メタ」情報と「オブジェクト」配列を含む辞書を作成します。

JSON は NSDictionary/NSArray にほぼ完全に対応しているため、「ラッパー」オブジェクトを使用するツールキットを使用する必要はまったくありません。

于 2012-07-01T14:39:17.473 に答える