Can’t get RestKit 0.2 to POST parameters
所以我正在尝试使用 [RKObjectManager postObject:path:parameters:success:failure:],但是在使用我的登录 POST 请求时遇到了一些麻烦。出于某种原因,我不断收到来自服务器的回复,说电子邮件和密码的参数是必需的,即使我将以下字典传递给参数:
NSDictionary *params = @{@”email”: @”fakeEmail@fakeDomain.com, @”password”: @”test123!”};
当我注销 RKObjectRequestOperation 时,它不会在请求中显示任何参数。我必须在请求中传递一个对象吗?如果是这样,我会传入什么对象?
(以前我只是使用 and AFJSONRequestOperation,但我想更新应用程序以使用 RestKit 并利用它提供的简单对象映射)。
任何帮助将不胜感激。
编辑更多代码:
我有一个名为 UserAuthService 的 RKObjectManager 子类,使用 RKMIMETYPEJSON 作为 requestSerializationMIMEType,具有以下请求描述符设置:
1
2 3 4 5 6 7 |
// User
RKResponseDescriptor *userResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[UserAuthMappingProvider userMapping] method:RKRequestMethodPOST pathPattern:@“user/login” keyPath:@“response.users” statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; [self addResponseDescriptor:userResponseDescriptor]; |
我实际请求的方法是:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
– (void)logUserInWithEmail:(NSString *)email andPassword:(NSString *)password success:(void (^)(UserObject *))success failure:(void (^)(RKObjectRequestOperation *, NSError *))failure
{ // Request Params NSDictionary *params = @{@“email”: email, @“password”: password}; NSLog(@“Params: %@”, params);
[self postObject:nil path:@“user/login” parameters:params } if (failure) |
UserAuthMappingProvider 中的 userMapping 方法如下所示:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
+ (RKEntityMapping *)userMapping
{ AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; RKEntityMapping *userMapping = [RKEntityMapping mappingForEntityForName:@“User” inManagedObjectStore:appDelegate.managedObjectStore]; [userMapping addAttributeMappingsFromDictionary:@{@“email”: @“email”, |
和 UserObject(在 .m 中每个都设置为 @dynamic):
1
2 3 4 5 6 7 8 9 10 11 |
@interface UserObject : NSManagedObject
@property (strong, nonatomic) NSString *email; @end |
我返回的错误是:
1
|
Error Domain=org.restkit.RestKit.ErrorDomain Code=-1011“Expected status code in (200-299), got 400” UserInfo=0x8eadbf0 {NSLocalizedRecoverySuggestion={“required_parameters”:{“email”:“string”,“password”:“string”},“status”:“failed”,“message”:“Insufficient information passed. see ‘required_parameters'”}
|
基本上我的目标是获取用户/登录调用的成功响应并将其映射到 UserObject。
- 您需要提供一个对象(具有关联的路线)或路径。显示一些代码。使用查尔斯查看它发送的内容。说明服务器的期望。你设置了什么序列化类型?
- 我在上面添加了一些希望有帮助的代码。
- 您可以配置 restkit 网络日志以获取更多详细信息:RKLogConfigureByName(“RestKit/Network*”, RKLogLevelTrace);
终于弄清楚了,当然这是一个非常愚蠢的问题。服务器需要一个参数字典,但我的对象管理器的 requestSerializationMIMEType 设置为 RKMIMETypeJSON。因此,一旦我评论了该行,请求就可以正常工作,对象为 nil 并且参数设置为 @{@”email”: email, @”password”: password}
的字典
来源:https://www.codenong.com/21762620/