【问题标题】:RestKit Customize SerializationRestKit 自定义序列化
【发布时间】: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 的第一天。帮助将不胜感激!谢谢!

【问题讨论】:

    标签: iphone ios 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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2012-06-08
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多