RestKit .20 RKRequestDescriptor postObject - (400-499) 中的预期状态代码,得到 200

Posted

技术标签:

【中文标题】RestKit .20 RKRequestDescriptor postObject - (400-499) 中的预期状态代码,得到 200【英文标题】:RestKit .20 RKRequestDescriptor postObject - Expected status code in (400-499), got 200 【发布时间】:2014-08-04 00:45:40 【问题描述】:

有一个奇怪的问题,我正在使用 RestKit 将 CoreData 对象发布到远程 Web 服务。远程端的一切看起来都运行良好,但似乎 RestKit 在映射响应时遇到了一些问题。

我的对象响应映射如下所示,我有一个 User 类与 UserProfile 一对一关系:

 //UserProfile
 RKEntityMapping * userProfileMapping =
        [RKEntityMapping mappingForEntityForName:NSStringFromClass([UserProfile class])
                            inManagedObjectStore:[manager managedObjectStore]];
//…mapping
//User
RKEntityMapping * userMapping =
        [RKEntityMapping mappingForEntityForName:NSStringFromClass([User class])
                            inManagedObjectStore:[manager managedObjectStore]];

//…mapping

//relationship mapping
[userMapping addPropertyMapping:[RKRelationshipMapping 
     relationshipMappingFromKeyPath:@"userProfile"
                          toKeyPath:@"userProfile"
                        withMapping:userProfileMapping]];

 //add the response mappings for GET success
 [manager addResponseDescriptorsFromArray:@[
        [RKResponseDescriptor responseDescriptorWithMapping:userMapping
                                                     method:RKRequestMethodGET
                                                pathPattern:nil
                                                    keyPath:@"currentUser"
                     statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]] …rest of my mappings];

请求映射是userMapping的逆映射

  RKRequestDescriptor * currentUserRequestDescriptor =
            [RKRequestDescriptor requestDescriptorWithMapping:[userMapping inverseMapping]
                                                  objectClass:[User class]
                                                  rootKeyPath:@"currentUser"
                                                       method:RKRequestMethodPOST];

  [manager addRequestDescriptor:currentUserRequestDescriptor];

我对@9​​87654325@ 类的GET 请求工作正常,POST 也工作正常。

要更新我的 User coreData 对象,我正在使用 `postObject'

[objectManager postObject:updatedUser
                     path:@"update"
               parameters:nil
                  success:…handler
                  failure:…handler]

POST 工作正常,对象保存在我的远程服务中。 但是,我的 success 处理程序永远不会被调用,我也永远不会得到更新的 User 对象。我已经登录,并且在响应中看到了有效的 JSON。

response.body="currentUser":….user object

相反,调用失败,它似乎想要一个 400 响应而不是我的服务响应的 200。

"NSLocalizedDescription" -> "预期状态码在 (400-499),得到 200"

我看不到在RKRequestDescriptor 上设置预期状态代码的方法,就像在RKResponseDescriptor 上一样。

谢谢

【问题讨论】:

【参考方案1】:

因为您的用户响应描述符使用method:RKRequestMethodGET,所以它不会被视为您的 POST 请求响应的匹配项。

改为将method 设置为RKRequestMethodAny

可能 RestKit 期望 400-499,因为您配置了一个响应描述符来处理该路径上的错误响应。

【讨论】:

以上是关于RestKit .20 RKRequestDescriptor postObject - (400-499) 中的预期状态代码,得到 200的主要内容,如果未能解决你的问题,请参考以下文章

RestKit .20.x 价值转换

RESTKit 0.20 - 注销和清除授权标头

RestKit 0.20 映射问题

RestKit 0.20 和 ManagedObjectContexts

Restkit 0.20.rc 需要但不包含多个 0.10 项

RestKit .20 with CoreData - 如何设置默认值