用RestKit发布JSON字符串数组 [英] Posting JSON array of strings with RestKit
问题描述
我有以下对象
@interface MyObject : NSObject
@property(nonatomic, copy) NSNumber *objectId;
@property(nonatomic, copy) NSArray *tags; // array of strings, e.g. @[@"one", @"two"]
@end
我想使用RestKit(0.23版)将请求发布到URL
I would like to POST a request using RestKit (version 0.23) to URL
<base_url>/do_something/:objectId
根据tags
属性,请求主体应该只是一个JSON字符串数组,即
The request body should be just a JSON array of strings according to the tags
property, i.e.
["one", "two"]
我定义了一条路线.
RKRoute *route = [RKRoute routeWithClass: [MyObject class] pathPattern: do_something/:objectId method: RKRequestMethodPOST];
[objectManager.router.routeSet addRoute: route];
现在,我想创建一个请求
Now, I would like to create a request
[objectManager requestWithObject: instanceOfMyObject method: RKRequestMethodPOST path: nil parameters: nil];
如何配置[RKObjectMapping requestMapping]
和如何定义RKRequestDescriptor
以获取上面的映射(字符串的JSON数组)?
How should I configure a [RKObjectMapping requestMapping]
and how should I define a RKRequestDescriptor
to get the mapping above (JSON array of strings)?
我尝试了以下操作:
RKObjectMapping *requestMapping = [RKObjectMapping requestMapping];
[requestMapping addPropertyMapping: [RKAttributeMapping attributeMappingFromKeyPath: @"tags" toKeyPath: nil]];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping: requestMapping objectClass: [MyObject class] rootKeyPath: nil method: RKRequestMethodAny];
但是,在RKAttributeMapping
中使用nil
作为键路径会崩溃.使用任何非null值都会导致请求的主体是JSON字典
However, using nil
as key path in RKAttributeMapping
crashes. Using any not-nil value results in request its body is a JSON dictionary
{"someKeyPath": ["one", "two"]}
推荐答案
我相信RestKit的设计思路是,您应该发布对象,例如. {"tags": [ "tag1", "tag2" ]}
.回应也一样;如果主体不是对象(仅仅是一个原始字符串或数组),RestKit就无法很好地处理它.
I believe RestKit was designed with the mentality you should be posting an object instead, eg. {"tags": [ "tag1", "tag2" ]}
. Same with responses; if the body is not an object (and just a raw string or array), RestKit isn't going to handle it well.
话虽如此,您可以自己序列化请求并将其发布到正文.例如:
That being said, you can serialize the request yourself and post it to the body. For example:
NSMutableURLRequest *request = [[objectManager requestWithObject:nil method:RKRequestMethodPOST path:@"do_something/objectId" parameters:nil] mutableCopy];
[request setHTTPBody:[NSJSONSerialization dataWithJSONObject:doableIds options:0 error:nil]];
RKObjectRequestOperation *operation = [objectManager objectRequestOperationWithRequest:request success:nil failure:nil];
[objectManager enqueueObjectRequestOperation:operation];
这篇关于用RestKit发布JSON字符串数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!