Объект RestKit 0.20 JSON сериализуется как запрос стиля GET в теле POST

Я только начинаю работать с RestKit 0.20.0, и у меня возникают проблемы с созданием красиво отформатированного запроса JSON.

Я получаю это (из журналов остальных комплектов):

request.body=title=A%20glorious%20walk%20in%20the%20woods&startDateTime=2013-01-13%2016%3A09%3A33%20%2B0000&endDateTime=2013-01-13%2016%3A09%3A43%20%2B0000&points[][longitude]=-122.0307725&points[][latitude]=37.3310798&points[][longitude]=-122.0307334&points[][latitude]=37.33154242&points[][longitude]=-122.03075743&points[][latitude]=37.33138305&points[][longitude]=-122.03075659&points[][latitude]=37.33131185&points[][longitude]=-122.03057969&points[][latitude]=37.33156519&points[][longitude]=-122.03075535&points[][latitude]=37.33144466&points[][longitude]=-122.03076342&points[][latitude]=37.33123666&points[][longitude]=-122.03074488&points[][latitude]=37.33149482&points[][longitude]=-122.03068145&points[][latitude]=37.33155419&points[][longitude]=-122.03062909&points[][latitude]=37.33156564&points[][longitude]=-122.03076853&points[][latitude]=37.33115792

когда я хочу этого (обычный объект json с фигурными скобками и массивом для свойства точек):

{
    title: "Something",
    startDateTime: "dateinfo",
    endDateTime: "moredateinfo",
    points: [
        {
            latitude: "37.33131313",
            longitude: "122.4325454"
        },
        {
            latitude: "37.33131313",
            longitude: "122.4325454"
        }
    ]
}

У меня есть два основных объекта: DLWalk, который содержит NSSet объектов DLPoint (это объекты CoreData, но на данный момент я игнорирую это и просто сосредотачиваюсь на создании HTTP-запроса)

Вот код, который я использую для создания моего запроса:

// Point mapping
RKObjectMapping *mappingPoint = [RKObjectMapping requestMapping];
[mappingPoint addAttributeMappingsFromArray:@[@"latitude", @"longitude"]];
RKRequestDescriptor *reqDescPoint = [RKRequestDescriptor requestDescriptorWithMapping:mappingPoint objectClass:[DLPoint class] rootKeyPath:nil];

// Walk mapping
RKObjectMapping *mappingWalk = [RKObjectMapping requestMapping];
[mappingWalk addAttributeMappingsFromArray:@[@"endDateTime", @"startDateTime", @"title"]];
RKRequestDescriptor *reqDescWalk = [RKRequestDescriptor requestDescriptorWithMapping:mappingWalk objectClass:[DLWalk class] rootKeyPath:nil];


// Define the relationship mapping
[mappingWalk addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"points" toKeyPath:@"points" withMapping:mappingPoint]];

RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://192.168.1.10:8080"]];
                            [manager addRequestDescriptor:reqDescWalk];
                            [manager addRequestDescriptor:reqDescPoint];
                            [manager addResponseDescriptor:responseDescriptor];

// POST to create
[manager postObject:walk path:@"/walk/save" parameters:nil success:nil failure:nil];

Итак, вопрос: почему я не получаю нормально выглядящий объект JSON в своем теле POST?


person codemonkey    schedule 17.01.2013    source источник


Ответы (1)


То, что вы получаете как request.body, закодировано в URL-адресе, что является поведением RESTKit по умолчанию и обычно работает нормально.

Если вы хотите, чтобы он был закодирован в формате JSON, просто вставьте эту строку перед публикацией запроса.

manager.requestSerializationMIMEType=RKMIMETypeJSON;

Для получения дополнительной информации об этом см. документацию API для класса RKObjectManager: запросSerializationMIMEType

person JD_    schedule 20.01.2013
comment
Так просто, не могу поверить, что я пропустил это! Спасибо! - person codemonkey; 20.01.2013