使用RestKit发出POST请求

时间:2013-12-30 02:09:11

标签: ios objective-c post restkit

我想使用RestKit发出POST请求,我使用方法postObject使用RKObjectManager。请求的主体是一个整数数组,JSON表示类似于[2348,9864,3645]。我已经为服务响应添加了RKResponseMapping并且工作正常,但是在服务端,数组总是为空。什么是RKRequestMapping然后我必须添加?我错过了什么?

我的代码如下:

- (void) sendPOSTRequest:(NSArray*) postBody{
RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:baseUrl]];

RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[RKJSONArrayResponse class]];

[responseMapping addAttributeMappingsFromDictionary:@{ @"Code" : @"code",
                                                       @"Success":@"success",
                                                       @"Content":@"content",
                                                       @"Error": @"error"}];

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping
                                                                                method:RKRequestMethodPOST
                                                                           pathPattern:@"/api/Requisitions/SendReport"
                                                                               keyPath:nil
                                                                           statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

RKObjectMapping *requestMapping = [RKObjectMapping mappingForClass:[NSArray class]];

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping
                                                                               objectClass:[NSArray class]
                                                                                rootKeyPath:nil,
                                                                                    method:RKRequestMethodPOST];

[manager addRequestDescriptor:requestDescriptor];

[manager addResponseDescriptor:responseDescriptor];

[self.manager postObject:postBody
                    path:@"/api/Requisitions/SendReport"
              parameters:nil
                 success:success
                 failure:failure];
}

服务代码是用C#用Web Api编写的,在这里你总是会收到变量“report”为null。:

public JsonResponse<int[]> SendReport(int[] report){}

2 个答案:

答案 0 :(得分:4)

您有两种方法可以解决此问题:

  • 如果你想正确完成它,你需要为整数值数组创建RKObjectMapping,然后你需要创建将使用你新创建的RKRequestDescriptor RKObjectMapping 1}}然后您将使用方法RKRequestDescriptor将此RKObjectManager添加到– addRequestDescriptor:。这将使RestKit根据您的postObject

  • 将您传递给RKObjectMapping方法的对象转换为JSON
  • 我不推荐这种方式。但是如果你只是想玩一下,看看你能用最少的努力做什么,你应该传递一个整数数组作为parameters参数,如下所示:

    NSArray * body = @ [@ 1234,@ 7475,@ 4432];

    [manager postObject:nil path:@“/ send”parameters:body ...]

请注意,参数参数为NSDictionary,但如果您通过NSArray,它将起作用,并会触发警告。 再次,花时间熟悉RKRequestDescriptorRKObjectMapping

如果您想了解有关最佳RestKit设置的更多信息,以及如何使用少量ObjectManagers构建可维护的应用程序。

答案 1 :(得分:1)

你想要的JSON真的太简单了。 RestKit希望最好发送一个包含键和整数数组值的字典。在您的情况下最简单的方法是直接使用NSJSONSerialization数组,然后将JSON添加到请求并使用objectRequestOperationWithRequest:success:failure:并将操作排入队列。