使用RestKit发送POST没有返回JSON内容

问题描述:

所以,我第一次发送POST请求。我M映射类和我想的和从文档,它会以这种方式工作阅读:使用RestKit发送POST没有返回JSON内容

初始化RK:

- (void)initRK{ 
    if(!manager){ 
     manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:BASE_CONTEXT_URL]]; 
    } 

    if (!reqMapping) { 
     reqMapping = [RKObjectMapping requestMapping]; 
    } 
} 

POST方法:

// Configure a request mapping for our Article class. We want to send back title, body, and publicationDate 
RKObjectMapping* deviceRequestMapping = [RKObjectMapping mappingForClass:[DeviceDTO class]]; 
[deviceRequestMapping addAttributeMappingsFromArray:@[ @"model", @"name", @"systemName", @"systemVersion", @"devToken" ]]; 

RKObjectMapping* msRequestMapping = [RKObjectMapping mappingForClass:[MemberShipDTO class]]; 
[msRequestMapping addAttributeMappingsFromArray:@[ @"validSince", @"validTill" ]]; 

RKObjectMapping* countryRequestMapping = [RKObjectMapping mappingForClass:[CountryDTO class]]; 
[countryRequestMapping addAttributeMappingsFromArray:@[ @"idNumberDTO", @"iso2DTO", @"short_nameDTO", @"calling_codeDTO" ]]; 

RKObjectMapping* userRequestMapping = [RKObjectMapping requestMapping]; 
[userRequestMapping addAttributeMappingsFromArray:@[ @"displayName", @"phoneNumber", @"status", @"userID" ]]; 

[userRequestMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:nil toKeyPath:@"device" withMapping:deviceRequestMapping]]; 
[userRequestMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:nil toKeyPath:@"memberShip" withMapping:msRequestMapping]]; 
[userRequestMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:nil toKeyPath:@"country" withMapping:countryRequestMapping]]; 

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userRequestMapping objectClass:[User class] rootKeyPath:@"user"]; 


//Create Objects 
UserDTO *user = [[UserDTO alloc]init]; 
user.displayName = userDTO.displayName; 
user.phoneNumber = userDTO.phoneNumber; 
user.status = userDTO.status; 
user.userID = userDTO.userID; 
user.country = userDTO.country; 

DeviceDTO *device = [[DeviceDTO alloc]init]; 
device.name = devDTO.name; 
device.systemName = devDTO.systemName; 
device.systemVersion = devDTO.systemVersion; 
device.model = devDTO.model; 
device.devToken = [[NSUserDefaults standardUserDefaults]objectForKey:PUSHTOKEN_USER_DEFAULTS_KEY]; 

user.deviceInfo = device; 

MemberShipDTO *ms = [[MemberShipDTO alloc]init]; 
ms.validSince = [NSDate date]; 
ms.validTill = [[UtilitieHandler new] getDateByAdd:+1 :0 :0 :0]; 

user.memberShipDetails = ms; 

[RKMIMETypeSerialization registerClass:[RKNSJSONSerialization class] forMIMEType:@"application/json"]; 

[[RKObjectManager sharedManager] setRequestSerializationMIMEType:RKMIMETypeJSON]; 
[[RKObjectManager sharedManager] setAcceptHeaderWithMIMEType:RKMIMETypeJSON]; 
[[RKObjectManager sharedManager] addRequestDescriptor:requestDescriptor]; 
[[RKObjectManager sharedManager] postObject:user path:@"user/integrate" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){ 
    RKLogInfo(@"Load collection of Articles: %@", mappingResult.array); 
}failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    RKLogError(@"Operation failed with error: %@", error); 
}]; 

所以我尝试了不同的事情,并在使用wireshark捕获请求后返回没有内容发送的请求。这意味着映射工作不正确。我尝试了很多,没有任何帮助。任何建议都会很棒!

这里捕获的数据包:

POST /WAZZUUPWS/rest/service/user/integrate HTTP/1.1 
Host: 192.168.2.115:8080 
Accept-Encoding: gzip, deflate 
Accept: application/json 
Content-Length: 0 
Connection: keep-alive 
Accept-Language: de;q=1, en;q=0.9, fr;q=0.8, ja;q=0.7, nl;q=0.6, it;q=0.5 
User-Agent: WAZZUUP!/1.0 (iPhone; iOS 6.1.4; Scale/2.00) 
+0

'requestDescriptor'似乎没有链接到'UserDTO'类。这是一个错字吗? – Wain

+0

哥们我刚才看到了。我会检查,当我在家里。我希望这是问题!写一个答案,我可以给它的信用,如果它的真实! – SaifDeen

它可能只是您的问题中的拼写错误,但requestDescriptor似乎没有链接到UserDTO类。

+0

遇到了一些问题! ty非常 – SaifDeen

好像你没有核心数据的理解尚对象。使用核心数据持久化的对象是NSManagedObject的子类,必须以不同的方式创建。进一步阅读此链接: http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreData/Articles/cdCreateMOs.html

至于当前的问题,你必须使用它代替:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"UserDTO" inManagedObjectContext:[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext]; 

UserDTO *user = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:nil]; 

但是,如果UserDTO是NSObject的子类,这将需要更改为NSManagedObject。

我的工作流程就像这样 - 创建核心数据模型并使用mogenerator自动生成NSManagedObject类定义。阅读更多关于它的地方:http://raptureinvenice.com/getting-started-with-mogenerator/

+0

我的Qeustion与Coredata没有任何关系,Sry。在输入错误之后, – SaifDeen