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];
我对@987654325@ 类的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 0.20 和 ManagedObjectContexts