restkit 0.20 - No Quotes in JSON for ManagedObject? -
in reading documentation , sample code posting objects, must have missed relating serializing entities. appears possible send entity postobject , expect use supplied mapping produce json , post server.
i have been able map , post object, json not coming through formed.
i have been able hand parameterize object , valid json. i'm dig source-code, wondering i'm missing.
here's code , results i'm seeing. insight/help appreciated!
i have following managed object:
@interface tfuser : nsmanagedobject @property (nonatomic, retain) nsstring * first_name; @property (nonatomic, retain) nsstring * last_name; @end
i have following code map it:
+(rkentitymapping *) mapping { if (_mapping == nil) { rkobjectmanager *objectmanager = [rkobjectmanager sharedmanager]; assert(objectmanager && "object manager not initialized!?"); rkmanagedobjectstore *managedobjectstore = objectmanager.managedobjectstore; assert(objectmanager && "no object store!?"); // user entity map _mapping = [rkentitymapping mappingforentityforname:@"tfuser" inmanagedobjectstore:managedobjectstore]; [_mapping addattributemappingsfromdictionary:@{ @"first_name": @"first_name", @"last_name": @"last_name" }]; _mapping.identificationattributes = @[ @"first_name" ]; } return _mapping; }
i have following code test serializing 1 managed object directly:
tfuser *user = (tfuser*) [self.managedobjectcontext insertnewobjectforentityforname:@"tfuser"]; user.first_name = @"mickey"; user.last_name = @"mouse"; nserror *error; rkrequestdescriptor *requestdescriptor = [rkrequestdescriptor requestdescriptorwithmapping:[tfuser.mapping inversemapping] objectclass:[tfuser class] rootkeypath:@"user" method:rkrequestmethodany]; nsdictionary *parameters = [rkobjectparameterization parameterswithobject:user requestdescriptor:requestdescriptor error:&error]; nsdata *jsondata= [rkmimetypeserialization datafromobject:parameters mimetype:rkmimetypejson error:&error]; nsstring *message = [[nsstring alloc] initwithdata:jsondata encoding:nsasciistringencoding]; nslog(@"user json:\r\n%@", message);
and produces i'd expect:
user json: { "user" : { "first_name" : "mickey", "last_name" : "mouse" } }
when postobject managed object directly:
[[rkobjectmanager sharedmanager] postobject:user path:@"/user" parameters:nil success:^(rkobjectrequestoperation *operation, rkmappingresult *mappingresult) { nslog(@"success"); } failure:^(rkobjectrequestoperation *operation, nserror *error) { nslog(@"error"); }];
the server receives:
{ user: { first_name: 'mickey', last_name: 'mouse' } }
and parser complains can't process json.
why getting different result? how can post produce correct json server?
thanks! - kevin
the code has been working entire time. debugging , code on server broken.
by inspecting logging of body request being sent server apparent json well-formed leaving client. here is:
request.headers={ accept = "application/json"; "accept-language" = "en;q=1, fr;q=0.9, de;q=0.8, zh-hans;q=0.7, zh-hant;q=0.6, ja;q=0.5"; "content-type" = "application/json; charset=utf-8"; "user-agent" = "treefort/1.0 (iphone simulator; ios 7.0.3; scale/2.00)"; } request.body={ "user" : { "first_name" : "mickey", "last_name" : "mouse" } }
the code on server doing this:
console.log req.body request = json.parse req.body user = request.user
the json has been processed objects time gets here. means log line dumping object log, not text of received body. second problem there no reason explicitly requesting json parse of body. it's been converted objects.
to fix changed code be:
user = req.body.user
sometimes helps have else say... should working. i've been banging head on days. thanks!
Comments
Post a Comment