0

PUTを使用したRESTWebサービス呼び出しの場合、次のようなJSONを送信する必要があります。

{"leader":"John Smith","leader_id":"asldfkj234234324asldkfs234","resource_uri":"/api/event/38001"}

代わりに、JSONをシリアル化すると、余分な「/」文字が挿入されます。これが、400エラーが発生していると思われる理由です。

{"leader":"John Smith","leader_id":"asldfkj234234324asldkfs234","resource_uri":"\/api\/event\/38001"}

これが私が使用しているコードです。何か案は?

NSDictionary *myDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                self.clubToEdit.leader, @"leader",
                                self.clubToEdit.leaderID, @"leader_id",
                                @"/api/event/38001", @"resource_uri",
                                nil];

NSError *error; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myDictionary options:0 error:&error];

if (!jsonData) 
{
    NSAssert(FALSE, @"Unable to serialize JSON from NSDict to NSData"); 
} else {
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

    RKParams *params = [RKRequestSerialization serializationWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]MIMEType:RKMIMETypeJSON];
    [client put:@"/api/event/?format=json&username=test&api_key=apikey" params:params delegate:self]; 
}
4

1 に答える 1

0

まず、あなたの質問はコードと一致しません。あなたの質問では、あなたはあなたが送る必要があると述べていますが"\api\event\38001"、あなたのコードではあなたは「」と書いています/api/event/38001"。あなたの質問は2番目のケースでのみ意味があるので、私はそれが効果的であると仮定します。

ここで重要なのは、JSONシリアライザークラスがスラッシュをエスケープすることです(一部の特殊文字はエスケープする必要があります)。そのため、これらの文字の前にバックスラッシュが追加されます。

于 2012-09-23T04:48:30.033 に答える