Restkit 0.22.0 和 iOS 7 RKObjectManager postObject 不生成 JSON 数据

Posted

技术标签:

【中文标题】Restkit 0.22.0 和 iOS 7 RKObjectManager postObject 不生成 JSON 数据【英文标题】:Restkit 0.22.0 and iOS 7 RKObjectManager postObject not generating JSON data 【发布时间】:2014-04-11 14:11:02 【问题描述】:

当我尝试在 XCODE 5 for ios 7 中使用 postObject 时收到此错误:

这是没有指向 https:// 服务的 URL 的错误消息

E restkit.network:RKObjectRequestOperation.m:542 Object request failed: Underlying HTTP request operation failed with error: Error Domain=org.restkit.RestKit.ErrorDomain Code=-1016 "Expected content type (
    "application/x-www-form-urlencoded",
    "application/json"
), got text/html" UserInfo=0xb9a44f0 NSLocalizedRecoverySuggestion="status": "ok", AFNetworkingOperationFailingURLRequestErrorKey=<NSMutableURLRequest: 0x8dd14c0>  URL: http:

NSLocalizedDescription=Expected content type (
    "application/x-www-form-urlencoded",
    "application/json"
), got text/html, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xb998d30>

 status code: 200, headers 
    Connection = close;
    "Content-Length" = 16;
    "Content-Type" = "text/html; charset=utf-8";

我在 postObject 方法中放入的任何对象都只返回 text/html 而不是 JSON。我似乎没有使用我定义的 requestDescriptor 或 requestMapping。它只是将对象发布为 text/html。

还有其他使用 RestKit 发布的方法吗?

是否有针对此问题的修复或解决方法?

这是我的代码示例:

RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; // objectClass == NSMutableDictionary
[requestMapping addAttributeMappingsFromArray:@[@"email", @"nickname"]];

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[RegisterDeviceInfo class] rootKeyPath:nil method:RKRequestMethodAny];


RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:_uuidURL]];
[RKObjectManager setSharedManager:objectManager];

[objectManager addRequestDescriptor:requestDescriptor];

RegisterDeviceInfo *deviceInfo = [RegisterDeviceInfo new];
deviceInfo.email = email;
deviceInfo.nickname = nickname;

// This is not accepted by the postObject and mapped to JSON object using above mappings and requestDescriptor


NSLog(@"deviceInfo is: %@", deviceInfo);

[[RKObjectManager sharedManager] postObject:deviceInfo path:(_uuidURL)               parameters:nil success: nil failure: nil];

NSLog(@"deviceInfo is: %@", deviceInfo);

【问题讨论】:

Wain- 我已添加完整的错误消息。感谢您的帮助。 Wain: ps- 我有 Restkit 0.22.0 我会在这篇文章中更改版本 【参考方案1】:

您应该显示错误的其余部分(显示内容之前的行)。这是关于响应,而不是请求。 HTML 响应通常意味着一条错误消息,您需要查看它是什么才能知道什么是错误的。

问题似乎是您在调用postObject 时使用(_uuidURL) 作为path,但它是完整的URL。

path 应该相对于用于创建对象管理器的基本 URL。即

baseURL = @"www.myserver.com/"

path = @"mycontent"

【讨论】:

附注您还应该升级到 RestKit 0.22.0

以上是关于Restkit 0.22.0 和 iOS 7 RKObjectManager postObject 不生成 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Restkit + iOS 发布到 Rails

iOS 7 中的 Restkit 兼容性

无法使用 Xcode 7.2 归档带有 RestKit v0.10.3 的 iOS 5.0 时代项目

动态属性作为在 iOS 中使用 Restkit 发布 JSON 的关键

Restkit,禁用缓存

隔夜向服务器发出的 iOS 请求,无响应 RestKit