使用 RestKit 将大对象作为 JSON 发布

Posted

技术标签:

【中文标题】使用 RestKit 将大对象作为 JSON 发布【英文标题】:POSTing large objects as JSON using RestKit 【发布时间】:2013-07-25 00:59:02 【问题描述】:

有没有一种方法可以 POST 大型 NSObject 派生对象结构,而无需手动将每个属性和属性集合指定到 RestKit?

这是一个简单的例子,只有一个类 DABUser 但想象一下它包含的属性也是对象、集合,并且这些属性具有更多相同的属性来表示更大的对象树。

要发布的类:

@interface DABUser : NSObject

@property (nonatomic) int age;
@property (copy, nonatomic) NSString *name;

@end

发布一个DABUser 对象:

RKObjectMapping *userMapping = [RKObjectMapping requestMapping];
[userMapping addAttributeMappingsFromArray:@[ @"age", @"name"]];

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userMapping objectClass:[DABUser class] rootKeyPath:nil method:RKRequestMethodPOST];

RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://localhost:3000"]];
objectManager.requestSerializationMIMEType = RKMIMETypeJSON;
[objectManager addRequestDescriptor:requestDescriptor];

DABUser *user = [[DABUser alloc] init];
user.age = 20;
user.name = @"Charlie Brown";

[objectManager postObject:user path:@"users/123" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 
    NSLog(@"Success!");
 failure:^(RKObjectRequestOperation *operation, NSError *error) 
    NSLog(@"Failed!");
];

上述代码生成的 JSON 是通过请求正文发送的:

 "age":20,"name":"Charlie Brown" 

当我有一个大型对象树时,定义属性映射可能会很烦人(并且容易出错),其中有许多行与此示例类似的代码:

RKObjectMapping *userMapping = [RKObjectMapping requestMapping];
[userMapping addAttributeMappingsFromArray:@[ @"age", @"name"]];

有没有一种方法可以让 RestKit 从对象生成 JSON,而不需要所有这些设置?

【问题讨论】:

也许您试图将 NSObject 序列化为 JSON? ***.com/questions/10515015/… 从对象序列化到 JSON 是一种选择。并感谢您的链接,将来可能会有用。虽然引入了一个新库和相关代码,但我还是手动设置请求映射。 【参考方案1】:

“当我有一个大对象树时,定义属性映射可能会很烦人(而且容易出错),有很多行与此示例类似的代码:”

我个人认为这是最简单的方法,也是一个很好的方法。我已经用这么多对象映射和多个对象链接对大对象进行了对象映射,发现这是正确处理它的最简单方法

【讨论】:

最后我选择了这条路线。花了一点时间弄清楚如何获得大对象结构,但似乎正在工作。我只需要确保在修改对象结构时保持同步,以确保 JSON 在其吐回服务器时匹配。 @dbarros : ? 使用这种方式是一个很好的方法,我已经用这个方法完成了 10 多个级别的 json。所以很好:) 是的,我一直在寻找灵丹妙药。但是,我会走这条路。

以上是关于使用 RestKit 将大对象作为 JSON 发布的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Axios 将大对象作为字符串发布?

JSON 对象映射 - RestKit

如何使用不同的主键属性更新 RestKit 中的已发布对象?

Restkit 映射 - 使用嵌入式对象/关系作为标识属性

RESTKit 对象 BOOL 属性为真/假 JSON

当它们没有出现在 JSON 中时,Restkit 删除 Coredata 中的对象