服务器未从 restkit 的 web 服务调用接收正文对象

Posted

技术标签:

【中文标题】服务器未从 restkit 的 web 服务调用接收正文对象【英文标题】:server is not receiving body object from webservice call of restkit 【发布时间】:2015-11-25 11:03:46 【问题描述】:

我想使用 restkit putobject 发送 put 请求并从服务器接收响应为 200 和字符串,但服务器给我 400 并说没有接收正文。 请求是 请求:https://myserver.com/api/v1/f1//更新 身体 = “一些价值” 响应为 200 “某个值”

为此我有restkit implment 请求https://myserver.com/api/v1 路径 f1//更新

这里是代码

RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[ModelUpdate class]];
 [responseMapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"status"]];

RKResponseDescriptor *responseDescriptor =
[RKResponseDescriptor responseDescriptorWithMapping:responseMapping
                                             method:RKRequestMethodPUT
                                        pathPattern:path
                                            keyPath:nil
                                        statusCodes:[NSIndexSet indexSetWithIndex:200]];
*objectPath=path;
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:[responseMapping inverseMapping]   objectClass:[ModelUpdate class] rootKeyPath:nil method:RKRequestMethodAny];

[rkObjectManager addResponseDescriptor:responseDescriptor];
[rkObjectManager addRequestDescriptor:requestDescriptor];
rkObjectManager.requestSerializationMIMEType = RKMIMETypeJSON;
[rkObjectManager putObject:someObj path:path parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 

    id updateField = mappingResult.array;
    [sDFWebInterface->m_DFWebInterfaceData receiveResponse:updateField forRequestNo:requestNo error:nil];
    NSLog(@"Success");

 failure:^(RKObjectRequestOperation *operation, NSError *error) 
    NSLog(@"Error from server in Put Request");
    [sDFWebInterface HandleServerAPIError:requestNo :error];
];
  /////Modelupdate class
 @interface ModelUpdate : NSObject
 @property(nonatomic,strong)NSString* status;// : 

  @end

【问题讨论】:

那么服务器接收的主体是什么,你期望它接收什么? someObj 是什么? someobj 基本上是一个字符串对象 someobj="newvalue" 【参考方案1】:

您的请求描述符指定objectClass:[ModelUpdate class],因此仅当您提供ModelUpdate 类的对象时才会使用它。

someobj basically a string object someobj="new value" 与规范不匹配,因此不会处理请求。您应该会在日志中看到关于此的错误。

如果您只想发送一个简单的字符串并在响应中获取一个简单的字符串,那么您实际上并不需要 RestKit。如果要处理传入和传出 ModelUpdate 的字符串,则需要提供适当的实例。

【讨论】:

如果我们想将对象作为字符串对象并接收字符串对象,是否可以使用rest kit。我们可以使用 [NSNull null] 吗? 一个简单的字符串本身不是有效的 JSON,所以不是。如果您创建了自己的序列化,但这比提出请求更费力...... 在我们没有收到 JSON 响应的情况下,我继续您的建议并直接使用 AFNetworking Http 客户端。

以上是关于服务器未从 restkit 的 web 服务调用接收正文对象的主要内容,如果未能解决你的问题,请参考以下文章

Restkit + Objective-c - 多次调用同一个 Web 服务

使用restkit api目标c调用Web服务时出错

不同的 web 服务调用不同的视图控制器 Restkit

通过 NSURLconnection 为 ios Web 服务使用 Web 服务库(RESTKIT/ASIHTTP 请求)的优点

Restkit:未调用 RKRequest 代表

未从 Web 服务获取 UITableView 中的数据