如何在 Restkit 中执行没有正文、url 参数的 PUT 请求并取回对象

Posted

技术标签:

【中文标题】如何在 Restkit 中执行没有正文、url 参数的 PUT 请求并取回对象【英文标题】:How to do in Restkit a PUT request with no body, url params, and get back an object 【发布时间】:2012-08-09 11:24:39 【问题描述】:

假设我必须执行此动态 PUT 请求: "http://mydomain.com/api/5?value=66"

身体是空的。 我将返回一个 201(已创建)状态,在正文中我将返回一个 json 对象, 我们称它为 MyObject,它具有 NSNumber* Id、NSString* name 字段;

现在在 restkit 我有这些选项:

- [[RKObjectManager sharedManager]  putObject:nil mapResponseWith:MyMapping delegate:self]; 

MyMapping 映射 MyObject。 问题是,如果我发送 nil,它不知道映射并抛出“无法为 HTTP 方法 'PUT' 的类型 '(null)' 的对象找到可路由路径”

- [[RKClient sharedClient] put:putUrl params:nil delegate:self];

putUrl = "http://mydomain.com/api/5?value=66" 这里的问题是响应没有映射,所以只有 didLoadResponse 被回调,而 didLoadObjects 从未被调用

[objectManager.router routeClass:[MyObject class] toResourcePath:putUrl forMethod:RKRequestMethodPUT]; 
    MyObject *obj = [[MyObject alloc] init];

    [[RKObjectManager sharedManager]  putObject:obj mapResponseWith:MyMapping  delegate:self];

这里的问题是,首先我伪造了它(将 MyObject 作为参数发送,而它不是),它只在第一次工作。我第二次尝试使用此方法时遇到此异常:“已为类 'MyObject' 和 HTTP 方法 'PUT' 注册了路由”

有什么建议吗?

谢谢

【问题讨论】:

【参考方案1】:

如果有人有兴趣,我在看到 restkit 在做什么后找到了答案。

putUrl = "http://mydomain.com/api/5?value=66";

MyMapping maps the returned MyObject that has fields NSNumber* Id, NSString* name;

下面是让它工作的代码:

void (^blockLoader)(RKObjectLoader *);

blockLoader = ^(RKObjectLoader *loader) 
    loader.delegate = self;
    loader.objectMapping = MyMapping;
;

NSString *resourcePath = putUrl;

[[RKObjectManager sharedManager] sendObject:nil toResourcePath:resourcePath usingBlock:^(RKObjectLoader *loader) 
    loader.method = RKRequestMethodPUT;
    blockLoader(loader);
];

【讨论】:

以上是关于如何在 Restkit 中执行没有正文、url 参数的 PUT 请求并取回对象的主要内容,如果未能解决你的问题,请参考以下文章

如何打印 Restkit (IOS) 发送的正文

如何在没有响应描述映射的情况下使用 RestKit?

在其 HTTP 正文中嵌套 JSON 的 RestKit 对象映射请求

POST 中的 Restkit url 映射

服务器未从 restkit 的 web 服务调用接收正文对象

restkit,如何在没有对象映射的情况下访问对象