2

我正在使用 restkit 将创建操作从 mu ipad 应用程序发布到我的 rails 应用程序。我为属性创建映射:

- (void) initCustomerMapping
{
    RKObjectMapping *customerSerializationMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]]; 
    [customerSerializationMapping mapKeyPath:@"id" toAttribute:@"id"]; 
    [customerSerializationMapping mapKeyPath:@"lastname" toAttribute:@"lastname"]; 
    [customerSerializationMapping mapKeyPath:@"firstname" toAttribute:@"firstname"]; 
    [customerSerializationMapping mapKeyPath:@"house_name" toAttribute:@"house_name"]; 
    [customerSerializationMapping mapKeyPath:@"sci" toAttribute:@"sci"]; 
    [customerSerializationMapping mapKeyPath:@"water_used" toAttribute:@"water_used"]; 
    [customerSerializationMapping mapKeyPath:@"address_line_1" toAttribute:@"address_line_1"]; 
    [customerSerializationMapping mapKeyPath:@"address_line_1" toAttribute:@"address_line_2"]; 
    [customerSerializationMapping mapKeyPath:@"postal_code" toAttribute:@"postal_code"]; 
    [customerSerializationMapping mapKeyPath:@"city" toAttribute:@"city"];

    [[RKObjectManager sharedManager].mappingProvider setSerializationMapping:customerSerializationMapping forClass:[Customer class]]; 
}

我发送请求:

    Customer* customer = [[Customer alloc] init]; 
    customer.lastname = lastname.text;
    customer.firstname = firstname.text;
    customer.house_name = house_name.text;
    customer.sci = sci.text;
    customer.water_used = water_used.text;
    customer.address_line_1 = address_line_1.text;
    customer.address_line_2 = address_line_2.text;
    customer.postal_code = postal_code.text;
    customer.city = city.text;

    [[RKObjectManager sharedManager] postObject:customer delegate:self];

但是 json 发送看起来像:

 {"water_used"=>"710", "house_name"=>"test", "address_line_1"=>"test", "city"=>"test", "sci"=>"546", "firstname"=>"test", "lastname"=>"test", "address_line_2"=>"test", "postal_code"=>"75896"}

我想得到:

   { "customer" => 
       {"water_used"=>"710", "house_name"=>"test", "address_line_1"=>"test", "city"=>"test", "sci"=>"546", "firstname"=>"test", "lastname"=>"test", "address_line_2"=>"test", "postal_code"=>"75896"}
    }

我该如何配置?我尝试使用forKey但我失败了

编辑

您还可以使用:

[[RKObjectManager sharedManager].mappingProvider registerMapping:customerSerializationMapping withRootKeyPath:@"customer"];
4

2 回答 2

2

我找到了另一个解决方案。在 toAttribute 的字符串中,我把它写成一个数组:

- (void) initCustomerMapping
{
    RKObjectMapping *customerSerializationMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]]; 
    [customerSerializationMapping mapKeyPath:@"id" toAttribute:@"customer[id]"]; 
    [customerSerializationMapping mapKeyPath:@"lastname" toAttribute:@"customer[lastname]"]; 
    [customerSerializationMapping mapKeyPath:@"firstname" toAttribute:@"customer[firstname]"]; 
    [customerSerializationMapping mapKeyPath:@"house_name" toAttribute:@"customer[house_name]"]; 
    [customerSerializationMapping mapKeyPath:@"sci" toAttribute:@"customer[sci]"]; 
    [customerSerializationMapping mapKeyPath:@"water_used" toAttribute:@"customer[water_used]"]; 
    [customerSerializationMapping mapKeyPath:@"address_line_1" toAttribute:@"customer[address_line_1]"]; 
    [customerSerializationMapping mapKeyPath:@"address_line_1" toAttribute:@"customer[address_line_2]"]; 
    [customerSerializationMapping mapKeyPath:@"postal_code" toAttribute:@"customer[postal_code]"]; 
    [customerSerializationMapping mapKeyPath:@"city" toAttribute:@"customer[city]"];

    [[RKObjectManager sharedManager].mappingProvider setSerializationMapping:customerSerializationMapping forClass:[Customer class]]; 
}

它给了我我的 json :

  { "customer" => 
       {"water_used"=>"710", "house_name"=>"test", "address_line_1"=>"test", "city"=>"test", "sci"=>"546", "firstname"=>"test", "lastname"=>"test", "address_line_2"=>"test", "postal_code"=>"75896"}
    }
于 2012-04-10T08:55:39.960 回答
0

您当然应该再添加一个包含 Customer 属性的对象。

举个例子 :

#import "Customer.h"

@interface SOCustomer : NSObject
@property (nonatomic, retain) Customer* customer;
@end

在此之后,您必须更改序列化。也许像这样:

RKObjectMapping *customerSerializationMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]]; 
[customerSerializationMapping mapKeyPath:@"id" toAttribute:@"id"]; 
[customerSerializationMapping mapKeyPath:@"lastname" toAttribute:@"lastname"]; 
[customerSerializationMapping mapKeyPath:@"firstname" toAttribute:@"firstname"]; 
[customerSerializationMapping mapKeyPath:@"house_name" toAttribute:@"house_name"]; 
[customerSerializationMapping mapKeyPath:@"sci" toAttribute:@"sci"]; 
[customerSerializationMapping mapKeyPath:@"water_used" toAttribute:@"water_used"]; 
[customerSerializationMapping mapKeyPath:@"address_line_1" toAttribute:@"address_line_1"]; 
[customerSerializationMapping mapKeyPath:@"address_line_1" toAttribute:@"address_line_2"]; 
[customerSerializationMapping mapKeyPath:@"postal_code" toAttribute:@"postal_code"]; 
[customerSerializationMapping mapKeyPath:@"city" toAttribute:@"city"];

[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:customerSerializationMapping forClass:[Customer class]];

// added
RKObjectMapping *vocustomerSerializationMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];
[vocustomerSerializationMapping mapKeyPath:@"customer" toRelationship:@"customer" withMapping:customerSerializationMapping ];
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:vocustomerSerializationMapping  forClass:[Customer class]];

我无法测试这段代码,但我认为这是正确的方法。只需找到如何正确序列化。

希望这可以帮到你。

于 2012-04-09T19:16:29.320 回答