2013-01-12 75 views
0

當我在RestKit中使用postObject方法時,一切似乎都可以通過日誌(請參見下文)進行。RestKit POSTs對象到服務器,但服務器收到空的GET請求

但是在服務器上,請求被接收爲GET並且請求主體爲空,而不是POST並且包含序列化對象。

2013-01-12 14:40:08.860 AppName[3953:c07] I restkit.network:RKHTTPRequestOperation.m:152 POST 'http://urlgoeshere.com' 

以下是我用於POST和RestKit初始化的代碼。我正在使用RestKit 0.20.0-pre6。

POST對象到服務器

// CREATE THE MANAGED OBJECT, AND SAVE IT 
RKManagedObjectStore *objectStore = [[RKObjectManager sharedManager] managedObjectStore]; 
Message *msg = [NSEntityDescription insertNewObjectForEntityForName:@"Message" inManagedObjectContext:objectStore.mainQueueManagedObjectContext]; 
msg.note = @"This is a sample message."; 
msg.dateCreated = [NSDate date]; 
[objectStore.mainQueueManagedObjectContext save:nil]; 

// BUILD THE REQUEST MAPPING & REQUEST DESCRIPTOR 
RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; 
[requestMapping addAttributeMappingsFromDictionary:@{ 
@"messageId": @"id", 
@"dateCreated": @"date_created", 
}]; 
[requestMapping addAttributeMappingsFromArray:@[ @"note" ]]; 
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[Message class] rootKeyPath:@"message"]; 
[[RKObjectManager sharedManager] addRequestDescriptor:requestDescriptor]; 

// SEND POST REQUEST TO SERVER 
[[RKObjectManager sharedManager] postObject:msg 
             path:@"/path/to/messages" 
           parameters:[NSDictionary dictionaryWithObject:[(AppDelegate*)[[UIApplication sharedApplication] delegate] userId] forKey:@"user_id"] 
            success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
             NSLog(@"success!"); 
            } 
            failure:^(RKObjectRequestOperation *operation, NSError *error) { 
             NSLog(@"failure.\n\n%@", [error description]); 
            } 
]; 

RestKit在初始化應用代理

NSURL *baseURL = [NSURL URLWithString:@"http://urlgoeshere.com"]; 
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:baseURL]; 

// Initialize managed object store 
NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; 
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel]; 
objectManager.managedObjectStore = managedObjectStore; 

// Setup our object mappings  
RKEntityMapping *messageMapping = [RKEntityMapping mappingForEntityForName:@"Message" inManagedObjectStore:managedObjectStore]; 
messageMapping.identificationAttributes = @[ @"messageId" ]; 
[messageMapping addAttributeMappingsFromDictionary:@{ 
@"id": @"messageId", 
@"date_created": @"dateCreated", 
}]; 
[messageMapping addAttributeMappingsFromArray:@[ @"note" ]]; 

[managedObjectStore createPersistentStoreCoordinator]; 
NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"DBNameHere.sqlite"]; 
NSError *error; 
NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:&error]; 
NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error); 

// Create the managed object contexts 
[managedObjectStore createManagedObjectContexts]; 

// Configure a managed object cache to ensure we do not create duplicate objects 
managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext]; 

回答

1

,你說什麼樣的服務器?我會懷疑你的服務器正在做一個重定向或什麼。 RestKit使用NSURLConnection來創建請求,所以它極不可能是客戶端,因爲您在日誌中看到的內容是直接從NSURLRequest中讀取的。

+0

感謝您的快速反應,布萊克。你是絕對正確的。當我訪問「/ path」時,它在服務器上重定向到「/ path /」。這就是爲什麼'GET'請求從RestKit工作正常,但沒有任何其他請求方法。我感謝您的幫助! –

相關問題