RestKit 自定义序列化

Posted

技术标签:

【中文标题】RestKit 自定义序列化【英文标题】:RestKit Customize Serialization 【发布时间】:2012-10-03 22:55:09 【问题描述】:

我需要配置 RestKit 以与期望以下内容的服务器 API 交互:

所有请求都在 multipart/form-data 中 有一个 JSON 有效负载。但是客户端必须折叠有效负载 进入表单数据字符串并在其前面加上“json =” 身份验证是通过散列 JSON 有效负载的内容来完成的 包含任何 GET 参数的 URL。并将此哈希附加到 URL(是的,我知道这很糟糕。但我 无法控制 API)

我正在尝试让 RestKit 将其序列化输出附加到 json=,然后将 RKObjectLoader 修改为计算机并附加正确的签名哈希。

我尝试继承 RKObjectManager 并覆盖 sendObject:toResourcePath:usingBlock: 来覆盖 HTTPBody;但不能让它工作。我也尝试过继承 RKClient 和 configureRequest: 但似乎这个方法在对象序列化之前被调用。

这是我使用 RestKit 的第一天。帮助将不胜感激!谢谢!

【问题讨论】:

【参考方案1】:

更新:我制定了一个不同于我原来描述的底部的解决方案。我创建了 RKObjectLoader 和 RKObjectManager 的子类。自定义对象管理器只需进行一项更改即可返回自定义对象加载器。对象加载器的发送消息被覆盖以执行自定义构造。

这是我制定的解决方案。

我使用 RKClient 的一个子类来覆盖

- (void)configureRequest:(RKRequest *)request 
  [super configureRequest:request];
  request.delegate = self;

并在委托中完成我所有的编码/签名。

- (void)requestWillPrepareForSend:(RKRequest *)request 
  [self encodeJSONPayloadForRequest:request];
  [self signRequest:request];


- (void)encodeJSONPayloadForRequest:(RKRequest*)request 
  NSDictionary * bodyDict = (NSDictionary*)request.params;
  NSError * error = nil;
  NSString * jsonString = [bodyDict JSONStringWithOptions:JKSerializeOptionNone error:&error];
  if (error) NSAssert(false, @"error serializing into JSON");
  NSDictionary * dictionary = [NSDictionary dictionaryWithObject:jsonString forKey:@"json"];
  request.params = dictionary;

我需要实现一种机制来传递给任何预先存在的委托。但是,这种方法似乎可以解决问题。

【讨论】:

以上是关于RestKit 自定义序列化的主要内容,如果未能解决你的问题,请参考以下文章

Restkit 从 NSNumber 序列化布尔值

RESTKIT:反序列化 JSON 与并非所有关系属性

RestKit 文本/html 序列化问题

使用 RestKit 序列化带有子对象的对象 [POSTing]

如何解决 RestKit JSON 序列化问题

如何使用 RestKit 序列化多态对多核心数据关系?