为什么 RestKit 改变我的响应内容类型?

2024-02-11

简而言之:我尝试使用以下命令从服务器获取数据content-typehttp请求头设置为@"text/html..但由于某种原因 RestKit 将其更改为application/JSON

解释:如果我只使用AF网络 https://github.com/AFNetworking/AFNetworking..一切都很顺利..这就是我的 AFNetworking 代码:

AFHTTPClient *client = [AFHTTPClient alloc] initWithBaseURL:
                                               [NSURL URLWithString:kApiBaseUrl]];
singleton.parameterEncoding = AFJSONParameterEncoding;
[singleton setDefaultHeader:@"Accept" value:@"text/html"];
[client getPath:getPath parameters:nil success:successCallback failure:failureCallback];

如果我用那个完全相同的客户并将其附加到

MyClient *client = [MyClient getSingleton];  //MyClient is instantiated as above        
self.objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
self.objectManager.managedObjectStore = self.managedObjectStore;
// this should have already been done by my client, but putting
// it here just to be sure
[self.objectManager setAcceptHeaderWithMIMEType:@"text/html"];

[[RKObjectManager sharedManager] getObjectsAtPath:kGradesPath 
                                       parameters:nil 
                                          success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
 // handle success
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
 // handle failure
}];

我得到的错误是:

 restkit.network:RKObjectRequestOperation.m:576 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=0x8f7acd0

深入研究主题..我在其中设置了一个断点托管对象请求操作与请求 https://github.com/RestKit/RestKit/blob/development/Code/Network/RKObjectManager.m?source=c,然后我检查了可接受的内容类型 https://github.com/RestKit/RestKit/blob/development/Code/Network/RKHTTPRequestOperation.h?source=c of HTTPRequestOperation创建了,它是零!所以我假设 RestKit 只是放置它自己的默认可接受的内容类型..我只是不知道在哪里以及如何阻止它。想法?

p.s.我无法控制服务器,所以我无法更改它content-type标头至application/JSON


Update:

事实证明,在RKObjectRequestOperation.m https://github.com/RestKit/RestKit/blob/development/Code/Network/RKObjectRequestOperation.m?source=c它得到mime-type from [RKMIMETypeSerialization registeredMIMETypes];(第354行)..等等RKMIMETypeSerialization.h https://github.com/RestKit/RestKit/blob/development/Code/Support/RKMIMETypeSerialization.h?source=cc有一个方法:

/**
 Registers the given serialization class to handle content for the given MIME Type identifier.

 MIME Types may be given as either a string or as a regular expression that matches the MIME Types for which the given serialization should handle. Serializations are searched in the reverse order of their registration. If a registration is made for an already registered MIME Type, the new registration will take precedence.

 @param serializationClass The class conforming to the RKSerialization protocol to be registered as handling the given MIME Type.
 @param MIMETypeStringOrRegularExpression A string or regular expression specifying the MIME Type(s) that given serialization implementation is to be registered as handling.
 */
+ (void)registerClass:(Class<RKSerialization>)serializationClass forMIMEType:(id)MIMETypeStringOrRegularExpression;

我如何使用它来注册text/html内容类型?


RestKit 通常期望其响应数据使用单个 MIMEType (JSON)。但是,您可以告诉它处理其他类型,例如text/plain and text/html使用您找到的方法,根据我的经验,它非常方便。将其添加到我的 RestKit 配置中(我在应用程序委托中执行此操作)允许我接受两者application/json and text/html作为响应数据内容类型。

[RKMIMETypeSerialization registerClass:[RKNSJSONSerialization class] forMIMEType:@"text/html"];

就我而言,这也很有帮助,因为 Jersey(我公司后端团队使用的 Web 服务框架)将空负载的内容类型默认为text/plain,除非我专门注册了该 MIMEType,否则它会触发失败块。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 RestKit 改变我的响应内容类型? 的相关文章

随机推荐

  • Python OpenCVsolvePnP转换为欧拉角

    我正在像这样使用solvePnP import cv2 import numpy as np Read Image im cv2 imread headPose jpg size im shape 2D image points If yo
  • Android Studio 中的混淆

    有没有什么混淆工具可以使用安卓工作室 IntelliGuard 插件是宣布支持 http plugins jetbrains com plugin 4511 pr 由 Studio 提供 但由于缺少 AntSupport 插件 它实际上不起
  • HostingEnvironment 类和 HttpRuntime 类有什么区别?

    正如你在这里看到的ASP NET 应用程序生命周期 http msdn microsoft com en us library ms178473 aspx 有两张图片 第一个在 AppDomain 中创建 HostingEnvironmen
  • 在 JavaFx 中重新启动应用程序

    我想关闭然后重新启动我正在制作的已经运行的应用程序 自动 通过单击按钮或类似的东西 我想这样做是为了以其他语言重新启动应用程序 我是对 JavaFx 和 Java 不太熟悉 请问您能给我解决这个问题吗 这个问题缺乏细节 您确实提到了 Jav
  • 使用 Spring Boot 设置 DynamoDB

    我正在尝试使用 SpringBoot 设置本地 DynamoDB 实例 我正在关注this https www baeldung com spring data dynamodb但使用 Gradle 当我尝试运行我的应用程序时 出现以下异常
  • 使用 LINQ 将项目推入堆栈

    我如何以编程方式将字符串数组推入通用堆栈 字符串数组 string array new string Liza Ana Sandra Diya 堆栈设置 public class stack
  • 获取 cp 无法创建常规文件 openssl 中没有这样的文件或目录

    尝试编译 openssl 代码时出现以下错误 在 make install 步骤中出现以下错误 如果有人解决了这个问题 请告诉我 谷歌搜索有链接 但指向一个未解决的问题 making install in crypto make 1 Ent
  • WCF 服务会公开属性吗?

    在实现 WCF 服务所需的接口中 我使用以下语句声明主类 ServiceContract 属性和任何公开的方法 OperationContract 我如何公开公共财产 谢谢 自从get属性的一部分是一种方法 这在技术上是可行的 但是 正如前
  • 如何通过外部 adb 命令判断 Android 活动是否已完成?

    在我们的测试中 我想使用脚本来运行一些 Android 活动 我可以使用 adb shell start Activity 命令来启动这些活动 有没有办法使用 adb 命令来判断活动何时完成 在发出下一个 adb start Activit
  • Weka 仅将数字更改为名义

    我有一个 CSV 文件 正在导入 Weka 所有变量均以数字形式导入 我需要将其中 3 个更改为名义值 然而 当我在其上放置数字滤波器时 所有变量都会发生变化 我只想改3 1 有没有办法通过过滤器改变一些 2 或者您可以在导入时设置它 如果
  • Android Studio 2.3 sdk 管理器选项卡呈灰色

    Android Studio 2 3 gt 配置 gt SDK 管理器 这些选项卡呈灰色 SDK 工具 SDK 更新站点 此外 显示包详细信息 复选框呈灰色 系统更新正常 没有错误消息 我认为这在 Studio 2 2 的某个时刻发生过 但
  • 编译项目时出错

    每次我尝试编译程序时都会收到此错误 一些项目功能 例如失败的完整解决方案分析 项目和依赖它的项目已被禁用 XamlCTask 任务不支持 DebugType 参数 验证任务中是否存在该参数 并且该参数是可设置的公共参数 实例属性 无法使用其
  • 如何在 fastapi 中使用刷新令牌?

    我试图找到一个使用的例子刷新令牌 https auth0 com blog refresh tokens what are they and when to use them 在 fastapi 中 快速APIdocs https fast
  • Java 8 lambda 语法中大括号何时是可选的?

    我意识到 Java 8 lambda 实现可能会发生变化 但在 lambda build b39 中 我发现只有当 lambda 表达式返回非 void 类型时才能省略大括号 例如 这样编译 public class Collections
  • MySQL Workbench 是否自动为外键创建索引?

    当我在 MySQL 工作台中创建外键时 索引 选项卡上会出现一个新条目 其与我刚刚创建的外键完全相同 这实际上是外键 由于某种原因显示在 索引 选项卡上吗 或者 MySQL Workbench 是否会尝试为我提供帮助并为我创建一个索引 知道
  • 在 DOM 元素上创建角度范围

    我需要创建一个新的角度范围并将其附加到 DOM 元素 我正在修改第三方控件 因此我无法选择仅使用指令 我需要做类似的事情 thirdPartyCallbackfunction domElement var myNewScope scope
  • segue完成后如何执行一些代码?

    iOS 6 是否可以知道何时UIStoryboardSegue已经完成转变了吗 就像我添加一个UIStoryboardSegue from UIButton推另一个UIViewController在导航控制器上 我想在推送转换完成后立即执行
  • 当没有文件要处理时,如何防止在SSIS包中导入Excel?

    我有一个导入 Excel 文件的 SSIS 包 在包内 我有一个脚本任务 用于在执行 Excel 导入过程之前检查 Excel 文件是否存在 当 Excel 文件不存在时 我无法执行包 因为AcquireConnection error 当
  • SQL Server 中的用户定义数据类型有多酷? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 SQL Server 中的用户定义数据类型是中级 SQL 用户应该了解和使用的吗 使用 UDT 的优点和缺点是什么 我的建议是永远不要使用它们
  • 为什么 RestKit 改变我的响应内容类型?

    简而言之 我尝试使用以下命令从服务器获取数据content typehttp请求头设置为 text html 但由于某种原因 RestKit 将其更改为application JSON 解释 如果我只使用AF网络 https github