Delete Object in Restkit .20 did not take JSON Values

不羁的心 提交于 2019-12-10 22:19:34

问题


I have an API which is used to delete a record in server DB. I used to construct the API with the request ID .It was working with CURL, but in Restkit it seems to give an error. The Curl is:

curl -d '{eve:{mod_policy:"current"}}' -X DELETE -H Content-Type:application/json https://myurl.com/eve/eve_id?token=my_aut_token\&apikey=myapi_key.

I checked with POST & PATCH. It takes the JSON as a correct form.

My RestKit Code Sample:

RKObjectMapping *requestMapping = [RKObjectMapping requestMapping];

[requestMapping addAttributeMappingsFromDictionary:@{ @"modPolicy" : @"mod_policy"}];

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping  objectClass:[Event class]   rootKeyPath:@"eve"];

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

[responseMapping addAttributeMappingsFromDictionary:@{
                                                      @"data" : @"data",
                                                      @"status":@"status"
                                                      }];

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping   pathPattern:nil   keyPath:@""  statusCodes:[NSIndexSet indexSetWithIndex:200]];

[objectManager addRequestDescriptor:requestDescriptor];
[objectManager addResponseDescriptor:responseDescriptor];

NSString * urlPath = [NSString stringWithFormat:@"/eve/%@?token=%@&apikey=%@",eventID,loginToken,apiKey];

[objectManager deleteObject:hubEve path:urlPath parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *result)
 {
     DLog(@" response code is %d",operation.HTTPRequestOperation.response.statusCode);
     Events * _event = [result firstObject];
     DLog(@"status %@",_event.status);

     if([_eventt.status isEqualToString:@"success"])
     {
        DLog("Move Next"); 

     }
 } failure:^(RKObjectRequestOperation *operation, NSError *error) {
     DLog("error %@",error);
 }];

Some log details, if I send As DeleteObject in request:

request.body=(null) //Restkit Log

Or if I send as post Object/Patch Object

request.body={"eve":{"mod_policy":"all"}} //Restkit Log


回答1:


Request mapping is explicitly not performed for DELETE requests. RestKit expects that when deleting you will be using the system to add parameters into the URL. You will need to plan some other method by which to delete. This could be using the RestKit mapping operation to create the payload data and then using the methods to create the URL request and setting the body data explicitly.




回答2:


RESTKit does not support DELETE request with request.body parameter natively because HTTP 1.1 doesn't support DELETE request with request.body. There is a work around to set request.body explicitly but its complex.

The request works well with cURL but not with HTTP, maybe because cURL does not send DELETE request with request.body as DELETE but upgrades it to PUT, we are not sure though.



来源:https://stackoverflow.com/questions/19218093/delete-object-in-restkit-20-did-not-take-json-values

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!