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 自定义序列化的主要内容,如果未能解决你的问题,请参考以下文章