Я делаю запрос POST с вложенным JSON в его теле HTTP, и я не получаю соответствующий ответ. Я передаю пользовательский объект под названием RequestObject со свойствами:Запрос на привязку объекта RestKit, который имеет вложенный JSON в свой HTTP-объект
@interface RequestObject : NSObject
@property (nonatomic, copy) NSString *title;
@property (nonatomic, strong) NSDictionary *location;
@property (nonatomic, strong) NSMutableArray *pictures;
Я хочу, чтобы отобразить свой объект таким образом, что в HTTP Body, то JSON будет выглядеть следующим образом:
{
"title": "Magic School Bus",
"location": {
"latitude": "38.764792",
"longitude": "-121.247574"
},
"pictures": [
{
"base64pic": "iVBORw0KGg..."
}
]
}
Для объекта запроса, Я настроил его так:
RequestObject *request = [[RequestObject alloc] init];
// Title property
request.title = @"MyTitle";
// Location property
request.location = @{
@"latitude" : [NSNumber numberWithDouble:38.757965],
@"longitude" : [NSNumber numberWithDouble:-121.254044]
};
// Pictures property
request.pictures = [[NSMutableArray alloc] init];
// I add a dictionary into the pictures array
NSDictionary *picture = @{@"base64pic" : @"somebase64string"};
[request.pictures addObject:picture];
Я считаю, что может быть установлен в моих request.pictures неправильно, и именно поэтому мой ответ возвращается неправильно. Это остаток моего кода для вызова запроса POST:
RKObjectMapping *requestMapping = [RKObjectMapping requestMapping];
[mapping addAttributeMappingsFromArray:@[@"title", @"location", @"pictures"]];
[manager addRequestDescriptor:[RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[RequestObject class] rootKeyPath:nil method:RKRequestMethodPOST]];
RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[NSDictionary class]];
[mapping addAttributeMappingsFromArray:@[@"response"]];
[manager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:responseMapping method:RKRequestMethodPOST pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
// Post
[manager postObject:request path:@"books/" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *result){
// Response back
}failure:^(RKObjectRequestOperation *operation, NSError *error) {
Когда я делаю вызов POST в моем проекте, я вижу это как тело HTTP запроса в моей консоли:
Request Body : location[latitude]=38.757965&location[longitude]=-121.254044&pictures[][base64pic]=somebase64string&title=MyTitle
Почему бы вам просто не создать NSMutableURLRequest и setHTTPBody с вашими данными запроса и создать RKObjectRequestOperation с этим запросом. Это может сделать вещи проще и понятнее. – execv
Я хотел бы использовать возможности отображения RestKit и узнать, как решить эту проблему, чтобы я мог применить это к моим другим запросам. – kevnguy
@ Ad-J Я последовал вашим советам и смог успешно запросить запрос. Я закончил делать это «вручную» через NSMutableURLRequest, и я установил тело HTTP с NSDictionary. Я хотел бы иметь возможность использовать пользовательский объект для установки моих значений, а затем преобразовать объект в NSData, чтобы я мог передать его в тело HTTP запроса. Есть ли способ взять объект, сопоставить его с RestKit и затем вернуть объект NSData из отображения? – kevnguy