RestKit - postObject 跳过参数
Posted
技术标签:
【中文标题】RestKit - postObject 跳过参数【英文标题】:RestKit - postObject skip parameters 【发布时间】:2014-03-28 07:55:51 【问题描述】:我试图POST
一个对象到服务器,但它不工作。这就是我正在做的事情。仅供参考,我正在使用 MagicalRecords 来轻松处理 CoreData
。
DBComments *comment = [DBComments MR_createEntity];
comment.body = @"This is body";
comment.subject = @"This is subject";
comment.commentable_id = [NSNumber numberWithInt:291110];
comment.send_email = [NSNumber numberWithBool:YES];
[[RKObjectManager sharedManager] postObject:comment path:URL_COMMENTS
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
KLog(@"success");
failure:^(RKObjectRequestOperation *operation, NSError *error)
KLog(@"fail");
];
但我得到以下回复:
E restkit.network:RKObjectRequestOperation.m:576 Object request failed: Underlying HTTP request operation failed with error: Error Domain=org.restkit.RestKit.ErrorDomain Code=-1011 "Expected status code in (200-299), got 400" UserInfo=0x11b688c0 NSLocalizedRecoverySuggestion="error":"body is missing, commentable_id is missing", AFNetworkingOperationFailingURLRequestErrorKey=<NSMutableURLRequest: 0xc632e50> URL: http://10.28.79.98:3002/comments , NSErrorFailingURLKey=http://10.28.79.98:3002/comments, NSLocalizedDescription=Expected status code in (200-299), got 400, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xc23cf70> URL: http://10.28.79.98:3002/comments status code: 400, headers
"Cache-Control" = "no-cache";
Connection = "Keep-Alive";
"Content-Length" = 54;
"Content-Type" = "application/json";
Date = "Fri, 28 Mar 2014 07:45:01 GMT";
Server = "WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20)";
"X-Request-Id" = c8b765e61a8d44020be26e9b3267096e;
"X-Runtime" = "0.010554";
"X-Ua-Compatible" = "IE=Edge";
正如您在响应中看到的那样,这些值没有被发布
"error":"body is missing, commentable_id is missing"
这是我的映射配置
[objectManager addRequestDescriptorsFromArray:@[
// Comments
[RKRequestDescriptor requestDescriptorWithMapping:[self commentsRequestMapping]
objectClass:[DBComments class]
rootKeyPath:@""
method:RKRequestMethodPOST],
]];
- (RKObjectMapping *)commentsRequestMapping
RKObjectMapping *commentsRequestMapping = [RKObjectMapping requestMapping];
[commentsRequestMapping addAttributeMappingsFromDictionary:@
@"body" : @"body",
@"commentable_id" : @"commentable_id",
@"commentable_type" : @"commentable_type",
@"created_at" : @"created_at",
@"id" : @"id",
@"lft" : @"lft",
@"parent_id" : @"parent_id",
@"rgt" : @"rgt",
@"subject" : @"subject",
@"title" : @"title",
@"updated_at" : @"updated_at",
@"user_id" : @"user_id",
@"send_email" : @"send_email",
];
return commentsRequestMapping;
我从来没有成功使用过postObject
。我错过了什么吗?请帮忙。
【问题讨论】:
打开映射的跟踪记录。使用 Charles 验证发送的内容。您是否应该在请求描述符中使用 nil 键路径? @Wain,感谢您的回复。设置rootKeyPath:nil
,成功了。
【参考方案1】:
如果服务器需要一组平面内容,那么请求描述符应该有一个 nil 键路径,而不是一个空字符串。
重要的是您发送的内容与服务器的预期相符,您应该结合使用跟踪日志记录和 Charles(或类似工具)来验证您的代码实际生成的内容。
【讨论】:
谢谢@Wain,你真的是救命稻草:)以上是关于RestKit - postObject 跳过参数的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 的 RestKit 中执行 postObject 时忽略响应
Restkit 0.2 postObject 总是返回 request.body=(null)
RestKit .20 RKRequestDescriptor postObject - (400-499) 中的预期状态代码,得到 200
Restkit 0.22.0 和 iOS 7 RKObjectManager postObject 不生成 JSON 数据